我正在尝试做什么:
动态地使用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
的实例,因为它继承了它吗?
答案 0 :(得分:4)
应该是:
if (listener.type ().isInstance (obj))
或者,实际上是相同的:
if (listener.type ().isAssignableFrom (obj.getClass ()))