我有一个从基类扩展的对象列表。现在我只想对列表中的一个类实例应用特定操作。
那里使用 instanceof
是一种好的做法吗?或者我应该通过例如自定义 enum
来区分对象?
abstract class Base;
class Foo extends Base;
class Bar extends Base;
List<Base> bases;
for (Base base : bases) {
if (base instanceof Bar.class) {
//execute my custom operation on the base object
doSomething((Bar) base);
}
}
如果这种方法总体上不是那么好,我怎样才能做得更好?
最佳答案
似乎没有任何理由使用此处的实例。让基类默认行为不做任何事情并在需要时在扩展类中覆盖它可能是有意义的。这样你只在需要时覆盖它(我 on.y 将其保留为抽象类以跟随这个示例不需要的问题)。 例如:
abstract class Base{
public void doSomething(){}
}
public class B0 extends Base{
@Override
public void doSomething(){//actually do something}
}
public class B1 extends Base{}
使用它的一个例子可能是这样的:
public class SomeOtherClass{
public void something(List<Base> bases){
for(Base base:bases)
base.doSomething();
}
}
关于java - instanceof 是一种好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14842458/