2

私がやろうとしていること:

Java継承による型チェックを動的に行います。私には2つのクラスがあります:1)com.example.Eventと2)com.example.TransactionEventを拡張しcom.example.Eventます。Class<?> typeチェックする型を返す関数があります。

コード:

public class Event{}

public class TransactionEvent extends Event{}

public interface Listener
{
    public Class<?> type();
}

public void checkType(Event obj, Listener listener)
{
    System.out.println(obj.getClass().toString());
    System.out.println(listener.type().toString());

    if (obj.getClass().isInstance(listener.type()))
         System.out.println("yay!");
}

出力:

class com.example.TransactionEvent
class com.example.Event

(no Yay)

それはそれを継承しているのでTransactionEvent、instanceofではありませんか?Event

4

1 に答える 1

4

する必要があります:

if (listener.type ().isInstance (obj))

または、これは実質的に同じです。

if (listener.type ().isAssignableFrom (obj.getClass ()))
于 2013-03-24T15:11:30.587 に答える