作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个计算模数的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;
}
}
然后我的代码提示:
Operator '%' cannot be applied to 'T','int'
为什么会提示?是不是将 Integer 拆箱为其原始类型?
最佳答案
无需过多讨论类型系统的细节做不到。
<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)也应该是:
class HashMapV2<V> {
public void add(String key, V value){
int modulus = Integer.parseInt(key) % size;
...
}
}
关于java - java泛型的模运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53631081/
我是一名优秀的程序员,十分优秀!