我已经看到之前使用的通配符表示任何对象 - 但最近看到使用:
<? extends Object>
Run Code Online (Sandbox Code Playgroud)
由于所有对象都扩展了Object,这两个用法是同义词吗?
有没有可以传递的Java编译器标志告诉编译器不允许使用原始类型?也就是说,对于任何泛型类,让编译器强制使用参数化版本,否则抛出编译错误?
我发现List<?>并List<? extends Object>以同样的方式行事.至于我,它们之间没有区别.如果我不对,你能解释一下我的区别吗?
import java.util.ArrayList;
import java.util.List;
public class TestClass {
static void func1(List<?> o, Object s) {
o.add(null); // only null
o.add(s); // wrong
o.get(0); // OK
}
static void func2(List<? extends Object> o, Object s) {
o.add(null); // only null
o.add(s); // wrong
o.get(0); // OK
}
public static void main(String[] args) {
func1(new ArrayList<String>(), new Integer(1));
func2(new ArrayList<String>(), new Integer(1));
List<? extends Object> list1 = new ArrayList<Object>();
List<?> list2 = …Run Code Online (Sandbox Code Playgroud)