我们在哪里可以使用ArrayList <?扩展My_Class>

use*_*627 5 java generics

我们可以在哪里,ArrayList<? extends My_Class>因为如果您以这种方式声明它,它将不允许您添加任何新元素:

ArrayList<? extends My_Class> obj=new ArrayList<? extends My_Class>();
list.add(new Derived_My_Class()); //this is compilation error
Run Code Online (Sandbox Code Playgroud)

Boz*_*zho 5

用于描述这些关键字的广泛使用的首字母缩略词是:PECS:生产者扩展 - 消费者超级.

因此,如果使用"extends",您的集合将生成给定类型的元素.所以你不能添加它,你只能从它.

一个示例用法是为API的客户端提供一个列表:

public List<? extends CharSequence> getFoo() {
    List<String> list = new ArrayList<String>();
    list.add("foo");
    return list;
}
Run Code Online (Sandbox Code Playgroud)

相关:Java泛型:Collections.max()签名和Comparator