我有一个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
,并将添加方法代码更改为类似
public class Modulo<T extends Integer,V> {
public void add(T key, V value){
int modulus = key % size;
}
}
然后我的代码抱怨:
运算符'%'不能应用于'T','int'
为什么要抱怨?是否没有将Integer拆箱到其原始类型?
答案 0 :(得分:1)
<T extends String,V>
和<T extends Integer,V>
都没有太大意义,因为String
和Integer
都是 final 类(意味着它们无法扩展。)
您实际上可以通过执行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;
...
}
}
答案 1 :(得分:0)
回答您的问题:
为什么要抱怨?不对其进行Integer拆箱 原始类型?
泛型不适用于原语!