Java 泛型:使用子类列表设置超类列表

发布于 2024-08-26 14:41:00 字数 247 浏览 6 评论 0原文

如果我在 MyClass 中有一个方法,例如

setSuperClassList(List<Superclass>)

......我应该能够这样做:

new MyClass().setSuperClassList(new ArrayList<Subclass>())

看起来这不会编译。为什么?

If I have a method in MyClass such as

setSuperClassList(List<Superclass>)

...should I be able to do this:

new MyClass().setSuperClassList(new ArrayList<Subclass>())

It appears this won't compile. Why?

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

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

发布评论

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

评论(4

北座城市 2024-09-02 14:41:00

尝试 setSuperClassList(List)

另请检查 PECS 以了解是否应该使用 ?扩展还是?超级。

Try setSuperClassList(List<? extends Superclass>).

Also check PECS to see wether you should use ? extends or ? super.

纵情客 2024-09-02 14:41:00

您只是在泛型方面做得有点错误。添加<代码>? extends 位,这将允许传入的列表包含超类或其任何子类。

setSuperClassList(List<? extends Superclass>)

这称为设置泛型上限。

List 语句表示 List 只能包含 SuperClass。这不包括任何子类。

You are just doing the generics a bit wrong. Add the ? extends bit, and that will allow the passed in list to contain the SuperClass or any of its subclasses.

setSuperClassList(List<? extends Superclass>)

This is called setting an upper bound on the generics.

The statement List<Superclass> says that the List can only contain SuperClass. This excludes any subclasses.

征﹌骨岁月お 2024-09-02 14:41:00

它不会编译,因为 java.util.List 不是 协变

请尝试使用 setSuperClassList(List) 代替。

It won't compile sincejava.util.List is not covariant.

Try setSuperClassList(List<? extends Superclass>) instead.

秋心╮凉 2024-09-02 14:41:00

做:

setSuperClassList(List<? extends Superclass> list)

这将允许超类的任何子类的列表。

Do:

setSuperClassList(List<? extends Superclass> list)

This will allow a list of any subclass of Superclass.

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