我有一个从基类扩展的对象列表。现在我只想对列表中的一个类实例应用特定的操作。instanceof是一种好的做法吗?
是否使用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);
}
}
如果这种方法一般不好,我该怎么做得更好?
使用多态性;这就是它存在的原因。 – 2013-02-12 21:48:42
- 而不是doSomething(base) - 你应该实现一些base.doSomething(),它在foo.doSomething()中被覆盖。 Google多态java或 - 覆盖方法java。 – 2013-02-12 21:50:08
我喜欢这个特定的答案:http://www.javapractices.com/topic/TopicAction.do?Id = 31。我意识到C++和Java是不同的,但是**“如果对象是T1类型的话,任何时候你发现自己在写代码的形式”,然后做一些事情,但是如果它是T2类型的,那么做一些其他的事情,“拍拍自己。 * – thang 2013-02-12 21:59:43