我有两个对象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.
如何解决此问题的最佳方式?
答案 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
的广泛使用会使您的应用程序变得缓慢且无法维护。