之间有什么区别List,List<?>,List<T>,List<E>,和List<Object>?
现在我不要盲目地问这个问题,所以请不要关闭这个帖子.我先介绍一下基本代码:
public static void test(List<?> list){
System.out.println(list); // Works
}
Run Code Online (Sandbox Code Playgroud)
我明白:
1 List.:是原始类型,因此不是typesafe.它只会在强制转换时生成运行时错误.当演员表不好时我们想要编译时错误.不建议使用.
2 . List<?>:是一个无界的通配符.但不确定这是为了什么?所以如果我改变List<?>方法
public static void test(List<?> list){
list.add(new Long(2)); // Error
list.add("2"); // Error
System.out.println(list);
}
Run Code Online (Sandbox Code Playgroud)
它仍然很好.如果您能解释一下这种用法,我将不胜感激.
编辑:如果我这样做:
public static void test(List<T> list){ // T cannot be resolved
System.out.println(list);
}
Run Code Online (Sandbox Code Playgroud)
但如果我改成List<?>这个:
public <T> T[] toArray(T[] a){
return a;
}
Run Code Online (Sandbox Code Playgroud)
3 . <T>:
public static …Run Code Online (Sandbox Code Playgroud) 你能帮我理解无界通配符类型列表和原始类型列表之间的区别吗?
List<?> b; // unbounded wildcard type
List a; // raw type
Run Code Online (Sandbox Code Playgroud)
除此之外,任何人都可以帮助我理解什么是有界类型参数列表?
List<E extends Number> c;
Run Code Online (Sandbox Code Playgroud)