我有以下带有一个静态方法的类:
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 编译器向我显示以下错误消息:
Helper 类中的方法 inRange 不能应用于给定类型;
必填:T,T,T
找到:java.lang.Integer、java.lang.Integer、java.lang.Integer
原因:推断的类型不符合声明的边界
推断:java.lang.Integer
绑定:java.lang.Number,java.lang.Comparable
有任何想法吗?
thanks.
Try <T extends Number & Comparable<T>>
.
E.g. Integer
实施Comparable<Integer>
,这不兼容Comparable<? super Number>
(Integer 不是 Number 的超类)。Comparable<? extends Number>
也不会工作,因为 Java 会认为?
可以是任何子类Number
,并通过T
to compareTo
然后将无法编译,因为它需要一个参数?
, not T
.
Edit:正如 newacct 所说,<T extends Number & Comparable<? super T>>
从那时起也将起作用(并且稍微更通用)compareTo
然后将接受任何?
其中T
是一个子类,并且像往常一样,可以将子类的实例作为需要超类的参数给出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)