JAVA - 使用列表重构多个 "instanceof"

标签 java list refactoring instanceof

目前我正在检查一个对象是否是 X、Y、Z 的实例并应用一些方法。 (这些只是插图:)

if (X instanceof Car || X instaceof Bus || ...) {
   X.color = RED;
}

但是,如果我有 300 个对象要比较(例如:汽车、公共(public)汽车、自行车、火车、飞机……),我将如何对其进行因式分解?我想过制作一个列表或数组,但初始化它似乎有点长:

Car car = new Car();
Bus bus = new Bus();
...
List<Transportation> list_t = Arrays.asList(car, bus, ...);
for (Transportation t : list_t) {
    if (X instance of t)
         X.color = RED;
}

如有任何建议,我们将不胜感激,谢谢。

最佳答案

我要么使用通用的父接口(interface)。

class Car implements DisplayColour {
    public Color displayColor() {
          return Color.RED;
    }

或者,如果您知道所有可能的类,我会使用 HashMap。

static final Map<Class, Color> classToColorMap = new HashMap<>(); 
static {
    classToColorMap.put(Car.class, Color.RED);
}

关于JAVA - 使用列表重构多个 "instanceof",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38609521/

相关文章:

refactoring - 限制 Webstorm 中的重构范围

Java Refactor 导致循环引用

java - 如何将参数传递给父类(super class)?

java - 当 DataFrame 有列时如何使用 Java Apache Spark MLlib?

c# - 根据多个唯一字段从列表中选择

列出树中叶子的路径

java - 适用于 Java EE 和 hibernate 的 Maven Artifact

java - 确保 PipedOutputStream 阻塞(刷新?)

Python 非 numpy 矩阵问题

c++ - 阻止其他人根据条件调用函数,但总是允许类调用它?