【发布时间】:2016-07-27 09:50:35
【问题描述】:
目前我正在检查一个对象是否是 X、Y、Z 的实例并应用一些方法。 (这些只是插图:)
if (X instanceof Car || X instaceof Bus || ...) {
X.color = RED;
}
但是,如果我有 300 个要比较的对象(例如:汽车、公共汽车、自行车、火车、飞机……),我将如何分解它?我想制作一个 List 或 Array 但初始化它似乎有点长:
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;
}
任何建议将不胜感激,谢谢。
【问题讨论】:
-
你有很多这样的
ifststements吗?是否有任何类层次结构,或者没有具有子类的类型? -
您可能需要查看访问者模式。
-
为什么不
X.color = X.getColor();?然后当然你可以把它改成简单的X.setColor();然后你可以把它去掉,这样汽车、公共汽车等总是红色的。 -
我会有很多“if”,目标只是重新组合不同的类型(例如:if instanceof ALL_TRANSPORT_USING_WHEELS,if instaceof AL_TRANSPORT_USING_WATER)。我可以创建超级类来重新组合它们,但如果有办法解决它会很好。
-
您不需要为您的 ArrayList 创建实例,您可以使用 ClassName.class 代替,并使用 Class 而不是 Transportation 作为您的列表类型。
标签: java list refactoring instanceof