gpt4 book ai didi

java - 说<有什么用?扩展 SomeObject> 而不是

转载 作者:IT老高 更新时间:2023-10-28 21:12:43 24 4
gpt4 key购买 nike

所以我正在查看一些 Java 代码并偶然发现:

List<? extends SomeObject> l;

基本上,这个列表接受所有属于某种 SomeObject 的对象 - SomeObject 本身或其继承者。但是根据多态性,它的继承者也可以看作 SomeObject,所以这也可以:

List<SomeObject> l;

那么,当第二个选项定义明确且几乎相同时,为什么有人会使用第一个选项?

最佳答案

List<SomeObject> l;

在这你不能说List<SomeObject> l = new ArrayList<SubClassOfSomeObjectClass>; (不允许)在哪里

List<? extends SomeObject> l;

你可以说

List<? extends SomeObject> l = new ArrayList<SubClassOfSomeObject>; (允许)

但请注意,在 List<? extends SomeObject> l = new ArrayList<SubClassOfSomeObject>;无法在列表中添加任何内容 l,因为 ?表示未知类(当然是 null )。

更新:对于您在评论中的问题 What could I possibly do with a list if I cannot add anything to it?

现在考虑一种情况,您必须编写一个函数来打印您的列表,但请注意,它必须只接受一个包含作为 SomeObject 子类的对象的列表。在这种情况下,如上所述,您不能使用

public void printList(List<SubClassOfSomeObjectClass> someList)

那你会怎么做?你会做类似的事情

    public void printList(List<? extends SomeObject> someList) {
for(SomeObject myObj : someList) {
//process read operations on myObj
}

关于java - 说<有什么用?扩展 SomeObject> 而不是 <SomeObject>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17834145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com