2

我正在尝试做的事情:

动态地使用 Java 继承进行类型检查。我有两个类: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)

不是TransactionEventinstanceof Event,因为它继承自它吗?

4

1 回答 1

4

应该:

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

或者,实际上是相同的:

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