0

我有一个参数化的泛型类 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 在涉及参数化类型时不支持原始类型的自动装箱?有什么我想念的吗?

谢谢!

4

1 回答 1

2

我认为,首先你应该自动装箱然后转换为 T。它应该写成如下。

public Long getLong() {  //not long, because it's primitive
        return 0L;
    }

所以当这个方法返回时会发生自动装箱。在您的情况下发生的情况是,它不会自动装箱长原语,并且您试图将这个长原语转换为 T. 您根本做不到。

于 2012-06-25T06:47:02.393 回答