继承如何与每个循环一起工作?

max*_*130 3 java foreach inheritance

继承如何与for-each循环相关?想象一下,我有两个课程:SubClass而且SuperClass,我有以下几个ArrayList.

/**
* Containes both SuperClass and SubClass instances.
*/
ArrayList<SuperClass> superClasses = new ArrayList<SuperClass>(); 
Run Code Online (Sandbox Code Playgroud)

是否可以superClasses以仅选择的方式进行迭代subClasses.

下列:

for(SubClass subClass : superClasses){
    // Do Foo
}
Run Code Online (Sandbox Code Playgroud)

不这样做.以下是我唯一可以开展的工作:

for(SuperClass superClass : superClasses){
    if(superClass instanceof SubClass){
        // Do Foo
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我不想使用,instanceof除非绝对必要,因为我一直在阅读(StackOverflow,Oracle Tutorials等),人们几乎总能找到一个更好的解决方案来增加封装.有更优雅的方式吗?

Jon*_*eet 5

那么你可以编写一个帮助方法来隐藏instanceof测试...... Guava有一个这样的方法,例如in Iterables.filter,你可以像这样使用:

for (SubClass subclass : Iterables.filter(superclasses, SubClass.class)) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

instanceof真的只是移动支票 - 它没有摆脱它.从根本上说,你需要检查,因为有些东西需要进行过滤.