我有以下带有一个静态方法的类:
public class Helper {
public static <T extends Number & Comparable<? super Number>> Boolean inRange(T value, T minRange, T maxRange) {
// equivalent (value >= minRange && value <= maxRange)
if (value.compareTo(minRange) >= 0 && value.compareTo(maxRange) <= 0)
return true;
else
return false;
}
}
我尝试调用这个方法:
Integer value = 2;
Integer min = 3;
Integer max = 8;
Helper.inRange(value, min, max) ;
Netbeans 编译器向我显示此错误消息:
method inRange in class Helper cannot be applied to given types; required: T,T,T found: java.lang.Integer,java.lang.Integer,java.lang.Integer reason: inferred type does not conform to declared bound(s) inferred: java.lang.Integer bound(s): java.lang.Number,java.lang.Comparable
有什么想法吗?
谢谢。
最佳答案
尝试 <T extends Number & Comparable<T>>
.
例如Integer
工具 Comparable<Integer>
, 这与 Comparable<? super Number>
不兼容(整数不是数字的父类(super class))。 Comparable<? extends Number>
也不会工作,因为 Java 会认为 ?
可以是 Number
的任何子类, 并传递 T
至 compareTo
然后将不会编译,因为它需要一个参数 ?
, 不是 T
.
编辑: 如 newacct 所说,<T extends Number & Comparable<? super T>>
从那时起也会工作(并且稍微更通用)compareTo
然后将接受任何 ?
其中T
是一个子类,并且像往常一样,子类的实例可以作为期望父类(super class)的参数给出。
关于java - static <T extends Number & Comparable<? super 号>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7966051/