0

我有一个节点列表。这个节点是我自己定义的一个数据类。每个节点都有一个 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>

我真的不知道为什么这是一个问题。我怎样才能使它工作?

4

2 回答 2

4

不,您需要使用Class.isInstance(Object). instanceof关键字不期望类型的对象,Class而只是直接类的名称——但Class.isInstance基本上是类似的。

于 2012-04-24T19:32:20.290 回答
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 是等价的。

于 2012-04-24T19:29:49.697 回答