2011-11-01 70 views
5

我已经在使用一个静态方法类:static <T extends Number&Comparable <?超级号码>>

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 found:java.lang.Integer,java.lang.Integer,java.lang.Integer reason:推断的类型不符合声明的边界 推断:java.lang.Integer 限定值:java.lang.Number,java.lang.Comparable

任何想法?

谢谢。

回答

10

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

例如Integer implements Comparable<Integer>,它与Comparable<? super Number>不兼容(Integer不是Number的超类)。 Comparable<? extends Number>将不起作用,因为Java会认为?可能是Number的任何子类,并且传递TcompareTo将不会编译,因为它需要参数?而不是T

编辑:为newacct说,<T extends Number & Comparable<? super T>>将工作太(和稍微更普遍)从那时起compareTo会再接受任何?其中T是一个子类,和往常一样,一个子类的实例,可以给出作为预期超类的参数。

+0

非常感谢你,它的作品:)也谢谢你的解释! – misco

+1

为获得最佳效果,请使用'> – newacct

相关问题