ArrayList 是否可以返回超类对象的列表?
例如:
B 类扩展 A 类。
我有一个 B 类的数组列表。
如何使用 Java 8 返回 A 类对象的 ArrayList?
例如:
class ClassA {}
class ClassB extends ClassA{}
我有一个名为classBList的B类列表。我想获取 ClassA 对象的列表。
List <ClassA> classAList = new ArrayList <ClassA> (classBList);
但我仍然在AList类中获得B类。
请帮忙。谢谢。
如果我正确理解了这个问题,您有一个运行时类型 ClassB 的对象列表,并且想要一个运行时类型 A 的对象列表。
考虑:
ClassB b = new ClassB();
ClassA a = b
这里的b
和a
指的是同一个实例。ClassB
的一个实例。
如果我们真的想更改运行时类型,我们需要创建一个新对象。假设一个合适的构造函数:
ClassA b = new ClassB();
ClassA a = new ClassA(a);
要将其应用于列表,我认为:
List<ClassA> as = bs.stream()
.map(ClassA::new)
.toCollection(Collectors.toCollection(ArrayList::new));
或者,更具可读性,但不太令人印象深刻:
List<ClassA> as = new ArrayList<>() {
for (ClassB b : bs) {
as.add(new ClassA(b);
}
但是,一般来说,类应该是叶子(实际上是最终的(或抽象的。