Java通用实例不使用继承

时间:2013-03-24 15:09:30

标签: java generics instanceof

我正在尝试做什么:

动态地使用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)

TransactionEvent不是Event的实例,因为它继承了它吗?

1 个答案:

答案 0 :(得分:4)

应该是:

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

或者,实际上是相同的:

if (listener.type ().isAssignableFrom (obj.getClass ()))