Java 如何将关系运算符与数字泛型结合使用?
如何将关系运算符与Java数字泛型结合使用Java 如何将关系运算符与数字泛型结合使用?,java,Java,如何将关系运算符与Java数字泛型结合使用 public class Test<K extends Number>{ private K key; public boolean f (int i){ return i < key; //ERROR } public boolean g (K k){ return k < key; //ERROR } } 公共类测试{ 私钥; 公共布尔f(int i){ 返回i
public class Test<K extends Number>{
private K key;
public boolean f (int i){
return i < key; //ERROR
}
public boolean g (K k){
return k < key; //ERROR
}
}
公共类测试{
私钥;
公共布尔f(int i){
返回i
有什么解决办法吗?与美国相比
数值比较运算符的每个操作数的类型
必须是可转换为原始数字的类型(§5.1.8)
键入,否则会发生编译时错误
及
如果一个类型是一个数值类型,则该类型称为可转换为数值类型
数字类型(§4.2),或是可转换的参考类型
通过取消装箱转换转换为数字类型。
这些
从类型Boolean
到类型Boolean
从类型Byte
到类型Byte
从类型Short
到类型Short
从类型Character
到类型char
从类型Integer
到类型int
从类型Long
到类型Long
从类型Float到类型Float
从类型Double
到类型Double
由于您所知道的K
是Number
的子类,因此不能保证是上述任何一种类型,因此不能使用K
类型的引用作为状态的操作数
数值比较运算符的每个操作数的类型
必须是可转换为原始数字的类型(§5.1.8)
键入,否则会发生编译时错误
及
如果一个类型是一个数值类型,则该类型称为可转换为数值类型
数字类型(§4.2),或是可转换的参考类型
通过取消装箱转换转换为数字类型。
这些
从类型Boolean
到类型Boolean
从类型Byte
到类型Byte
从类型Short
到类型Short
从类型Character
到类型char
从类型Integer
到类型int
从类型Long
到类型Long
从类型Float到类型Float
从类型Double
到类型Double
由于您所知道的K
是Number
的一个子类,因此不能保证是上述任何一种类型,因此不能使用K
类型的引用作为的操作数。最简单的解决方案是标记K
以扩展Number
并实现Comparable
:
公共类测试{
私钥;
公共布尔f(int i){
如果(!(整数的键实例)){
返回false;
}
返回新的整数(i)。比较((整数)键)<0;
}
公共布尔g(K){
返回k.compareTo(键)<0;
}
}
最简单的解决方案是标记K
以扩展编号
并实现可比性
:
公共类测试{
私钥;
公共布尔f(int i){
如果(!(整数的键实例)){
返回false;
}
返回新的整数(i)。比较((整数)键)<0;
}
公共布尔g(K){
返回k.compareTo(键)<0;
}
}
没有解决方案。如果key
是我的Number
自定义子类的对象,而你对此一无所知,i
的结果会是什么?@luigimendoza:Number是不可比的。@BheshGurung哦,你说得对。嗯,您仍然有intValue
和类似的方法来检索存储的值并将其用于比较。根据需要进行设计。@SotiriosDelimanolis关于i
?或者更明智的做法是,将K
更改为同时实现Comparable
:
@luigimendoza:但您如何知道它是整数而不是其他值呢?没有解决方案。如果key
是我的Number
自定义子类的对象,而你对此一无所知,i
的结果会是什么?@luigimendoza:Number是不可比的。@BheshGurung哦,你说得对。嗯,您仍然有intValue
和类似的方法来检索存储的值并将其用于比较。根据需要进行设计。@SotiriosDelimanolis关于i
?或者更明智的做法是,将K
更改为同时实现compariable
:
@LuiggiMendoza:但您如何知道它将是整数而不是其他值呢。
public class Test<K extends Number & Comparable<K>>{
private K key;
public boolean f (int i) {
if (!(key instanceof Integer)) {
return false;
}
return new Integer(i).compareTo((Integer)key) < 0;
}
public boolean g (K k){
return k.compareTo(key) < 0;
}
}