用什么来代替

所以我查看了一些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>;

因为?代表未知课程( )。

您在评论中的问题What could I possibly do with a list if I cannot add anything

to it?

现在考虑一种情况,在这种情况下,您必须编写一个函数来打印列表,但请

。如上所述,在这种情况下,您将无法使用

public void printList(List<SubClassOfSomeObjectClass> someList)

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

    public void printList(List<? extends SomeObject> someList) {

for(SomeObject myObj : someList) {

//process read operations on myObj

}

以上是 用什么来代替 的全部内容, 来源链接: utcz.com/qa/403643.html

回到顶部