java - instanceof 是一种好的做法吗?

标签 java oop enums

我有一个从基类扩展的对象列表。现在我只想对列表中的一个类实例应用特定操作。

那里使用 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/

相关文章:

java - 无法运行新的android项目

java - 在 Java 中设置堆大小

java - 如何使用 Apache BCEL 获取类构造函数参数?

php - 我可以在类外更改的跨多个类实例的共享变量

java - Mac OSX 中的 Eclipse 中缺少 JRE

java - 需要无用的接口(interface)替代方案

Prototype 构造函数上下文中的 JavaScript 类型检查和异常?

c# - MVC EnumMember 自定义字符串

python - 有没有专门的方法来获取 python `Enum` 中的项目数?

java - 获取字符串并一次与多个枚举类型进行比较