我有一个非原始对象的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. */
    }
}
这可以像这样重构:
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();
        }
    }
}
| 归档时间: | 
 | 
| 查看次数: | 1809 次 | 
| 最近记录: |