我有一个从基类扩展的对象列表.现在我想仅对列表中的一个类实例应用特定操作.
是否使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果这种方法一般不太好,我怎么能做得更好?
似乎没有任何理由使用此处的实例。让基类默认行为不执行任何操作并在需要时在扩展类中覆盖它可能是有意义的。这样,您仅在需要时重写它(我将其保留为抽象类,以遵循本示例不需要的问题)。例如:
abstract class Base{
public void doSomething(){}
}
public class B0 extends Base{
@Override
public void doSomething(){//actually do something}
}
public class B1 extends Base{}
Run Code Online (Sandbox Code Playgroud)
使用这个的一个例子可能是这样的:
public class SomeOtherClass{
public void something(List<Base> bases){
for(Base base:bases)
base.doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)