Den*_*hev 3 java generics collections
我们有以下代码:
public class TestGenerics {
static <T> void mix(ArrayList<T> list, T t) {
System.out.println(t.getClass().getName());
T item = list.get(0);
t = item;
System.out.println(t.getClass().getName());
}
public static void main(String[] args) {
ArrayList<Object> list = new ArrayList<Object>();
list.add(new Integer(3));
mix(list, "hello world");
}
}
Run Code Online (Sandbox Code Playgroud)
在输出中我得到:
java.lang.String
java.lang.Integer
Run Code Online (Sandbox Code Playgroud)
这是无稽之谈 - 我们刚刚分配Integer到String没有得到ClassCastException!我们不能这样写:
String s = new Integer(3);
Run Code Online (Sandbox Code Playgroud)
但这就是我们刚刚在这里所做的.
这是一个bug还是什么?
在你的情况下,作为list一个ArrayList<Object>,T被认为是一个Object所以你可以看到的东西:
static void mix(ArrayList<Object> list, Object t)
Run Code Online (Sandbox Code Playgroud)
所以你分配了Integer一个Object(String之前是).
Object obj = new Integer(3);
obj = "Hello"; //No CCE here
Run Code Online (Sandbox Code Playgroud)