我有一个非原始对象的arraylist,其中每个对象是10个不同类之一的实例.
我想迭代列表,并为列表中的每个对象调用基于对象类的方法.
通过帖子后,我看到了使用cast的建议; if/else; 和有效的instanceof.然而,我有很多课程,我想知道是否有更优雅和简洁的解决方案.
任何输入赞赏.
我确实避免了这样的链条instanceof.事实上,我会避免if/ else或switch一般情况下的链(例外情况适用).
我们经常拥有的,如果我们有一连串的instanceof检查,那就是错误的责任和缺乏多态性.
想象一下以下代码:
class Type1 {}
class Type2 {}
class Type3 {}
class TypeProcessor {
public void processObjets() {
final List<Object> objects = getObjectList();
for (final Object o : objects) {
if (o instanceof Type1) {
processType1((Type1) o);
} else if (o instanceof Type2) {
processType2((Type2) o);
} else if (o instanceof Type2) {
processType2((Type2) o);
}
}
}
public void processType1(final Type1 o) {
/* Process for Type 1. */
}
public void processType2(final Type2 o) {
/* Process for Type 2. */
}
public void processType3(final Type3 o) {
/* Process for Type 3. */
}
}
Run Code Online (Sandbox Code Playgroud)
这可以像这样重构:
interface Type {
void process();
}
class Type1 implements Type {
public void process() {
/* Process for Type 1. */
}
}
class Type2 implements Type {
public void process() {
/* Process for Type 2. */
}
}
class Type3 implements Type {
public void process() {
/* Process for Type 3. */
}
}
class TypeProcessor {
public void processObjects() {
final List<Type> objects = getObjectList();
for (final Type o : objects) {
o.process();
}
}
}
Run Code Online (Sandbox Code Playgroud)