继承与继承列表

发布于 2024-11-08 22:47:58 字数 155 浏览 1 评论 0原文

B 类扩展了 A 类。我有一个 B 列表(List list1),但对于某些操作,我只需要 A 类字段,但 List list2 = list1 不起作用。如何解决这个问题呢?

Class B extends class A. I have a list of B (List<B> list1), but for some operations I need only class A fields, but List<A> list2 = list1 doesn't work. How can this problem be solved?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小嗲 2024-11-15 22:47:58
List<? extends A> list2 = list1;

这意味着“A 的特定子类型的列表”。

如果您可以使用 List(这意味着“A 及其所有子类的列表”),您将失去编译时安全性。想象:

List<B> list1 = ..;
List<A> list2 = list1;
list2.add(new C());
for (B b : list1) {
    //ClassCastException - cannot cast from C to B
}
List<? extends A> list2 = list1;

This means "a list of a specific subtype of A".

If you could use List<A>, which means "a list of A an all of its subclasses", you would loose the compile time safety. Imagine:

List<B> list1 = ..;
List<A> list2 = list1;
list2.add(new C());
for (B b : list1) {
    //ClassCastException - cannot cast from C to B
}
执妄 2024-11-15 22:47:58

泛型是类型严格的,它们不支持像数组这样的协变类型。

Generics are type strict , they don't support co-variant types like array.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文