在Page 112 of CHAPTER 5 GENERICS in the book - Effective Java,这些句子出现
原始类型
List和参数化类型之间的区别是什么List<Object>...虽然您可以将a传递List<String>给List类型的参数,但您无法将其传递给类型参数List<Object>
我试过这个
public static void getMeListOfObjs(List<Object> al){
System.out.println(al.get(0));
}
public static void main(String[] args) {
List<Object> al = new ArrayList<Object>();
String mys1 = "jon";
al.add(mys1);
getMeListOfObjs(al);
}
Run Code Online (Sandbox Code Playgroud)
它运行没有任何错误......这是书内容中的错误吗?我引用了第二版
试试这个:
public static void getMeListOfObjs(List<? extends Object> al) {
System.out.println(al.get(0));
}
public static void main(String[] args) {
List<String> al = new ArrayList<String>();
String mys1 = "jon";
al.add(mys1);
getMeListOfObjs(al);
}
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为List<String>不匹配List<Object>
正如@darijan指出通配符?使用所有类的后代扩展类型chack.
我建议阅读有关泛型和通配符的更多信息