将List <String>传递给期望List <Object>的方法

dam*_*mon 0 java generics

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)

它运行没有任何错误......这是书内容中的错误吗?我引用了第二版

Qui*_*rin 6

试试这个:

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.

我建议阅读有关泛型和通配符的更多信息