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

如何将关系运算符与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
有什么解决办法吗?与美国相比

数值比较运算符的每个操作数的类型 必须是可转换为原始数字的类型(§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;
    }
}