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等),人们几乎总能找到一个更好的解决方案来增加封装.有更优雅的方式吗?
那么你可以编写一个帮助方法来隐藏instanceof测试...... Guava有一个这样的方法,例如in Iterables.filter,你可以像这样使用:
for (SubClass subclass : Iterables.filter(superclasses, SubClass.class)) {
...
}
Run Code Online (Sandbox Code Playgroud)
它instanceof真的只是移动支票 - 它没有摆脱它.从根本上说,你需要检查,因为有些东西需要进行过滤.