这种情况应该如何?

时间:2012-04-24 19:28:11

标签: java

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

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

2 个答案:

答案 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是等价的。