gpt4 book ai didi

java - 另一个 Java 泛型混淆

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:31:30 25 4
gpt4 key购买 nike

让我们有以下代码:

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");
}
}

在我得到的输出中:

java.lang.String
java.lang.Integer

这是胡说八道 - 我们只是将 Integer 分配给 String 而没有得到 ClassCastException!我们不能这样写:

String s = new Integer(3);

但这就是我们刚刚在这里所做的。

是bug还是什么?

最佳答案

在您的情况下为 list是一个 ArrayList<Object> , T被视为 Object所以你可以看到:

 static void mix(ArrayList<Object> list, Object t)

所以你分配了一个 IntegerObject (之前是 String)。

Object obj = new Integer(3);
obj = "Hello"; //No CCE here

关于java - 另一个 Java 泛型混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3844925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com