我有一个java类来计算模块。下面是代码
public class HashMapV2<T extends String,V> {
public void add(T key, V value){
int modulus = Integer.parseInt(key) % size;
}
}上面的add函数工作得很好,也就是说,如果您在类级别上检查,我有T extends String。但是,如果我将其更改为喜欢T extends Integer,并将add方法代码更改为
public class Modulo<T extends Integer,V> {
public void add(T key, V value){
int modulus = key % size;
}
}然后我的代码抱怨道:
运算符'%‘不能应用于'T','int’
为什么要抱怨?是不是正在对Integer的原始类型进行反装箱?
发布于 2018-12-05 12:22:56
回答你的问题:
为什么要抱怨?是不是正在对Integer的原始类型进行反装箱?
泛型不适用于原语!
发布于 2018-12-05 12:16:18
<T extends String,V>和<T extends Integer,V>没有太大的意义,因为String和Integer都是最终类(这意味着它们不能扩展)。
实际上,您可以通过执行int modulus = key.intValue() % size;来使其工作,但正如上面所提到的,使T成为通用的没有意义,因为它永远只能是一个Integer。因此,按照以下方式声明您的类是有意义的:
class Modulo<V> {
public void add(int key, V value){
int modulus = key % size;
...
}
}为了完整起见,您的另一个类也应该是:
class HashMapV2<V> {
public void add(String key, V value){
int modulus = Integer.parseInt(key) % size;
...
}
}https://stackoverflow.com/questions/53631081
复制相似问题