【问题标题】:How should this instanceof condition look like?这个 instanceof 条件应该是什么样子?
【发布时间】:2012-04-24 19:28:10
【问题描述】:

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

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

【问题讨论】:

    标签: java


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      不,那是不可能的。您应该使用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 是等价的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-12
        • 2015-12-09
        • 2017-12-14
        • 1970-01-01
        相关资源
        最近更新 更多