gpt4 book ai didi

java - 自动装箱不适用于参数化类型

转载 作者:行者123 更新时间:2023-12-02 07:43:53 25 4
gpt4 key购买 nike

我有一个参数化泛型类 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不支持基本类型的自动装箱?我有什么遗漏的吗?

谢谢!

最佳答案

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

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

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

关于java - 自动装箱不适用于参数化类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11184483/

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