如何将超类型列表转换为子类型列表?

新手上路,请多包涵

例如,假设您有两个类:

 public class TestA {}
public class TestB extends TestA{}

我有一个返回 List<TestA> 的方法,我想将该列表中的所有对象转换为 TestB 这样我最终得到一个 List<TestB>

原文由 Jeremy Logan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 604
2 个回答

简单地转换为 List<TestB> 几乎可以工作;但它不起作用,因为您不能将一个参数的泛型类型转换为另一个参数。但是,您可以通过中间通配符类型进行转换,并且它是被允许的(因为您可以在通配符类型之间进行转换,只是带有未经检查的警告):

 List<TestB> variable = (List<TestB>)(List<?>) collectionOfListA;

原文由 newacct 发布,翻译遵循 CC BY-SA 3.0 许可协议

泛型的转换是不可能的,但如果您以另一种方式定义列表,则可以在其中存储 TestB

 List<? extends TestA> myList = new ArrayList<TestA>();

当您使用列表中的对象时,您仍然需要进行类型检查。

原文由 Salandur 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题