如何使用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
}
}
有没有解决方法呢?相比于?
如何使用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
}
}
有没有解决方法呢?相比于?
最简单的解决方案将被标记K
延长Number
和实施Comparable<K>
:
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;
}
}
Java Language Specification的状态
必须是一个类型,它是可转换的每一个数值比较操作符的操作数的类型(§5.1.8)到原始数字 类型,或发生编译时错误。
和
A型被认为是转换为数字类型如果是 数值类型(§4.2),或者它是一个引用类型,其可以被转换 通过拆箱转换为数字类型。
Boolean
从类型为类型boolean
从
Byte
类型键入byte
Short
从类型为类型short
从
Character
类型键入char
从
Integer
类型键入int
从
Long
类型键入long
从Float类型为float类型
从
Double
类型键入double
由于K
的全部信息是Number
的子类,因此不能保证是以上任何一项,所以不能使用K
类型的引用作为<
运算符的操作数。
您将不得不根据您尝试实现的内容以及如何比较类型来设计接口的策略。
有没有解决办法。如果'key'是我自定义的'Number'子类的一个对象,那么你对'i
@LuiggiMendoza:数字不可比。 –
@BheshGurung哦,你说得对。 Wel,你仍然有'intValue'和类似的方法来检索存储的值并将其用于比较。根据你的需要做你的设计。 –