泛型Java的模运算符

时间:2018-12-05 11:18:19

标签: java

我有一个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拆箱到其原始类型?

2 个答案:

答案 0 :(得分:1)

  • 没有像类型系统那样过于详细 无法做到。
  • <T extends String,V><T extends Integer,V>都没有太大意义,因为StringInteger都是 final 类(意味着它们无法扩展。)

    您实际上可以通过执行int modulus = key.intValue() % size;使其起作用,但是如上所述,使T通用是没有意义的,因为它只能是Integer

    < / li>

因此,按如下方式声明您的类将很有意义:

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拆箱   原始类型?

泛型不适用于原语!