我有一些继承树,它的所有子类都保存在数组列表中。因此,如果类a, b, c
继承自Foo
类,我会这样:
private List<Foo> arr = new ArrayList<Foo>();
arr.add(new a());
arr.add(new a());
arr.add(new b());
arr.add(new c());
我只想通过此数组列表中的类对象进行迭代。我可以这样做:
for(int i = 0; i < arr.size(); i++) {
if(arr[i] instanceof a) {
// ...
}
}
嗯,这应该可行,但是我必须在几个地方编写这个代码......并且在for循环中会有其他几个,所以代码会失去很多可读性。
我很想知道,有更短的方法吗?也许只是for for循环?
答案 0 :(得分:1)
不,你是对的。这样:
for(int i = 0; i < arr.size(); i++) {
if(arr[i] instanceof a) {
// ...
}
}
这是最好的方法。
答案 1 :(得分:0)
您可以编写一个自己的列表,从ArrayList扩展并覆盖从Iterable
继承的方法,并且只显示下一个元素,如果它是a
的实例。
然后你的循环看起来像这样:
for(a obj : arr) {
...
}