static <t extends =“”number =“”&=“”可比<?=“”super =“”number =“”>&gt; </t>

时间:2011-11-01 11:58:22

标签: java generics methods static call

我有一个静态方法跟随类:

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       bound(s):java.lang.Number,java.lang.Comparable

有什么想法吗?

感谢。

1 个答案:

答案 0 :(得分:10)

尝试<T extends Number & Comparable<T>>

E.g。 Integer实现Comparable<Integer>,它与Comparable<? super Number>不兼容(整数不是Number的超类)。 Comparable<? extends Number>也不起作用,因为Java会认为?可能是Number的任何子类,而将T传递给compareTo则不会编译,因为它需要一个参数?,而不是T

编辑:正如newacct所说的那样,<T extends Number & Comparable<? super T>>也会起作用(稍微更一般),因为compareTo将接受? T { {1}}是一个子类,并且像往常一样,子类的实例可以作为期望超类的参数给出。