我有一个节点列表。这个节点是我自己定义的数据类。每个节点都有一个Object类型的数据字段。现在我想在数据字段中具有参数对象的节点列表中找到节点。我写了这个方法,因为我想首先比较两个对象(数据字段中的参数和对象)是否属于同一类型:
public Node getnNodeByData(Object obj) {
for (Node node : nodes) {
if (node.getData() instanceof obj.getClass()) {
}
}
}
不幸的是,这种情况不起作用:
Incompatible operand types boolean and Class<capture#1-of ? extends Graph>
我真的不知道为什么这是一个问题。我怎样才能使这个工作?
答案 0 :(得分:4)
不,您需要使用Class.isInstance(Object)
。 instanceof
关键字不期望类型Class
的对象,而只是类型的直接名称 - 但Class.isInstance
基本上类似。
答案 1 :(得分:3)
不,那是不可能的。您应该使用isAssignableFrom()
或isInstance()
。这两种方法之间的区别在于isInstance(null)
将返回false,而isAssignableFrom(null)
将返回true。
[object] instanceof [class]
应该翻译成这个:
[class].class.isAssignableFrom(object.getClass());
示例:
Integer i = 4;
boolean b = i instanceof Number;
boolean k = Number.class.isAssignableFrom(i.getClass());
b和k是等价的。