Java 8 数组列表返回超类对象的列表



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

这里的ba指的是同一个实例。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);
}

但是,一般来说,类应该是叶子(实际上是最终的(或抽象的

最新更新