首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泛型java的Modulo算子

泛型java的Modulo算子
EN

Stack Overflow用户
提问于 2018-12-05 11:18:19
回答 2查看 369关注 0票数 1

我有一个java类来计算模块。下面是代码

代码语言:javascript
复制
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方法代码更改为

代码语言:javascript
复制
public class Modulo<T extends Integer,V> {

    public void add(T key, V value){
        int modulus = key % size;
    }
}

然后我的代码抱怨道:

运算符'%‘不能应用于'T','int’

为什么要抱怨?是不是正在对Integer的原始类型进行反装箱?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-05 12:22:56

回答你的问题:

为什么要抱怨?是不是正在对Integer的原始类型进行反装箱?

泛型不适用于原语!

票数 0
EN

Stack Overflow用户

发布于 2018-12-05 12:16:18

  • 没有太多的细节,因为类型系统根本无法做到这一点。
  • <T extends String,V><T extends Integer,V>没有太大的意义,因为StringInteger都是最终类(这意味着它们不能扩展)。 实际上,您可以通过执行int modulus = key.intValue() % size;来使其工作,但正如上面所提到的,使T成为通用的没有意义,因为它永远只能是一个Integer

因此,按照以下方式声明您的类是有意义的:

代码语言:javascript
复制
class Modulo<V> {
    public void add(int key, V value){
        int modulus = key % size;
        ...
    }
}

为了完整起见,您的另一个类也应该是:

代码语言:javascript
复制
class HashMapV2<V> {
    public void add(String key, V value){
        int modulus = Integer.parseInt(key) % size;
        ...
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53631081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档