作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我一直想知道 Java 中的一个函数,我希望它存在。我想遍历一个 Arraylist(比如 A 类),它包含 B 类和 C 类的对象,它们都扩展了 A。这个想法,我只想遍历(例如)ArrayList 中 B 类的对象。
这怎么可能,就像下面代码中的简短示例,而没有长示例?
主类:
import java.util.*;
public class Test {
public static void main(String[] args) {
new Test ();
}
Test() {
ArrayList<A> a = new ArrayList<A> ();
a.add (new B ());
a.add (new C ());
a.add (new C ());
a.add (new B ());
a.add (new C ());
for (A aObject : a) { // this works, I want it shorter
if (aObject instanceof B) {
B b = (B) aObject;
System.out.println (b.hi);
}
}
for (B b : a) // like this?
System.out.println (b.hi);
}
}
答:
public class A {
}
乙:
public class B extends A {
String hi = "hi";
}
C:
public class C extends A {
}
编辑:因为很多人回答这个问题:我知道 instanceof 的用法。我想要一种更快的方法来遍历数组中的所有对象,其中类是 B。
最佳答案
您可以为它创建一个可重用的 Filter 类,类似于 FileFilter
。 (请参阅 korifey 关于使用 Guava 的回答。)除此之外,不,没有任何现有功能可以做到这一点。此外,任何现有功能都必须准确地执行您正在执行的操作,因为 List
类型没有任何方法知道不同类别的对象在列表中的位置。 (它还必须遍历它们才能找到它们。)
如果您需要一个高性能的解决方案来解决这个问题,您可以考虑为您的单独实例存储单独的列表 - 替换或补充您当前的列表。您甚至可以将其包装在一个复合类中,该类将通过一个通用 API 提供两种功能(所有实例和类实例)。
关于java - 使用扩展类遍历 Arraylist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8431112/
我是一名优秀的程序员,十分优秀!