Java:当 B 实现 A 时从 List<B> 转换为 List<A>?

标签 java generics list inheritance casting

我定义了以下类和接口(interface):

public interface A {
}

public class B implements A {
}

我有一个 ListB 对象,我需要将其转换为 ListA 对象:

List<B> listB = new List<B>();
listB.add(new B());  // dummy data
listB.add(new B());  // dummy data
listB.add(new B()); // dummy data

List<A> listA = (List<A>) listB;

上面的最后一行导致编译错误“无法从 List 转换为 List”。我尝试使用以下方法解决此问题:

List<A> listA = Arrays.asList((A[]) listB.toArray());

不幸的是,这会抛出一个 ClassCastException。有谁知道我该如何解决这个问题?

最佳答案

你不能那样施法。创建一个新的:

List<A> listA = new ArrayList<A>(listB);

构造函数取 Collection<? extends A> .无论如何它都会指向相同的引用。

相关文章:

java - Java中如何调用Smali

java - 使用 Java 访问 Web 服务

java - ChildBrowser.java 语法错误

java - 如何定义返回 List 的通用 java 方法

c# - 按列表中的多个项目进行分组,然后求和并平均 C#

python - 在Python中快速旋转点列表

list - OCaml:检查成员记录列表

java - 如何允许用户从 Android 中的联系人中选择一个或多个电话号码和/或电子邮件地址

java - java通用对象反序列化和序列化

c# - 从泛型方法问题调用重载方法