检查列表中的子类实例并返回对象

时间:2015-12-04 17:17:58

标签: java list if-statement return instanceof

我有两个对象A和B.其中B是A的扩展名。

我有一个可以包含As和Bs的列表

我的方法类似于:

B findB()
{
    for (int i = 0; i < ABlist.size(); i++)
    {
        if(ABlist.get(i) instanceof B)
        {
                return ABlist.get(i);
        }
        else{return null;}
    }
    return null;
}

应该查看列表中的所有对象并返回该对象(如果它是B的实例)但是我得到了一个不兼容的类型错误,因为A无法转换为B.

如何解决此问题的最佳方式?

1 个答案:

答案 0 :(得分:-1)

您可以向类及其子类添加一个方法,而不是执行instanceof,它为特定的子类返回this,为其他子类返回null。像这样:

class A {
  public A get() {
    return null;
  }
}
class B extends A {
  @Override
  public A get() {
    return this;
  }
}
...
B findB() {
    for (A a : ABlist) {
        if (a.get() != null) {
            return (B) a;
        }
    }
    return null;
}

我们的想法是尽可能避免使用instanceof。此运算符是语言的一部分,但反射和instanceof的广泛使用会使您的应用程序变得缓慢且无法维护。