我有一个参数化的泛型类 X,它采用类型 T。在其上没有定义任何条件(如 T 扩展/实现)。
class X <T> {
Map<T, String> map = new HashMap<T, String>();
public void put() {
map.put((T)getLong(), "");
}
public long getLong() {
return 0L;
}
}
我们知道 T 绝对是对象类型而不是原始类型。因此,我希望返回的“long”值自动装箱为 Long,然后强制转换为 T,但这不会发生。
编译器说“不能从 long 转换为 T”。如果我将参数化类型 T 替换为“Long”,则没有问题。谁能解释为什么 Java 在涉及参数化类型时不支持原始类型的自动装箱?有什么我想念的吗?
谢谢!