Java 如何在arraylist中迭代一种类型的对象?

Java 如何在arraylist中迭代一种类型的对象?,java,Java,我有一些继承树,它的所有子类都保存在一个数组列表中。因此,如果类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(a obj : arr) { ... } private List arr=new ArrayList(); a

我有一些继承树,它的所有子类都保存在一个数组列表中。因此,如果类
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(a obj : arr) {
    ...
}
private List arr=new ArrayList();
arr.add(新的a());
arr.add(新的a());
arr.add(新的b());
arr.add(新的c());
我只想遍历这个数组列表中的a类对象。我可以这样做:

for(int i = 0; i < arr.size(); i++) {
   if(arr[i] instanceof a) {
      // ...
   }
}
for(int i=0;i
这应该行得通,但我得在几个地方写这段代码……而且for循环中还有几个if,所以代码会失去很多可读性


我在想,有没有一种更简单的方法?也许只是使用for循环?

不,你说得对。这:

for(int i = 0; i < arr.size(); i++) {
    if(arr[i] instanceof a) {
        // ...
    }
}
for(int i=0;i

是这样做的最佳方式。

您可以编写自己的列表,从ArrayList扩展并覆盖从
Iterable
继承的方法,并且仅当下一个元素是
a
的实例时才显示它。 然后您的循环将如下所示:

private List<Foo> arr = new ArrayList<Foo>();

arr.add(new a());
arr.add(new a());
arr.add(new b());
arr.add(new c());
for(a obj : arr) {
    ...
}

不知道更多的是,这是如何做到的。但是,如果你给出一个具体的例子,我们可能会知道多态性是否更合适。