for-each ループに関連して継承はどのように機能しますか? と の 2 つのクラスがSubClass
ありSuperClass
、次の があるとしますArrayList
。
/**
* Containes both SuperClass and SubClass instances.
*/
ArrayList<SuperClass> superClasses = new ArrayList<SuperClass>();
superClasses
のみを選択するような方法で反復することは可能ですかsubClasses
?
以下:
for(SubClass subClass : superClasses){
// Do Foo
}
これはしません。以下は、私が仕事に取り掛かることができる唯一のものです:
for(SuperClass superClass : superClasses){
if(superClass instanceof SubClass){
// Do Foo
}
}
ただし、絶対に必要な場合を除き、使用したくありませんinstanceof
。どこでも (StackOverflow、Oracle チュートリアルなど) を読み続けているため、ほとんどの場合、カプセル化を増やすより良い解決策を見つけることができます。これを行うよりエレガントな方法はありますか?