我有一个参数化的泛型类X,它的类型为T.其上没有定义任何条件(如T extends/implements)。Autoboxing不适用于参数化类型
class X <T> {
Map<T, String> map = new HashMap<T, String>();
public void put() {
map.put((T)getLong(), "");
}
public long getLong() {
return 0L;
}
}
我们知道T肯定是一个对象类型而不是原语。所以我期望返回的“长”值被Autoboxed变长,然后转换到T会跟着,但那不会发生。编译器说“不能长时间投射到T”。编译器说:“不能长时间投射到T”。编译器说:“不能长时间投射到T”。如果我将参数化类型T替换为“长”,则没有问题。 任何人都可以解释为什么Java不支持在涉及参数化类型时对基元类型进行自动装箱?有什么我失踪?
谢谢!
假设以上所有条件都只与T一样有效。对于任何其他参数化,您将得到'ClassCastException'。那么你在那里用泛型来完成什么? –
感谢您的回复。对不起,是的,在这里我们可以假设T和Long是兼容的类型。不是真的担心运行时出现ClassCastException,而是编译时出错。 –
如果你添加了''它可能会工作。 –