java - static <T extends Number & Comparable<? super 号>>

标签 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 编译器向我显示此错误消息:

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 的任何子类, 并传递 TcompareTo然后将不会编译,因为它需要一个参数 ? , 不是 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/

相关文章:

java - XML 添加与子元素相同的元素(获取 HIERARCHY_REQUEST_ERR)

java - Java 客户端上的 SSL 握手

java - C++ (Visual Studio) 有 Java 风格的注释吗?

Java gRPC 从 ServerInterceptor 获取服务名称

java - 返回字符的问题

java、泛型和 getAll

generics - 基元的特例泛型类型参数

java - 泛型可以作为复合组件属性标签的 "type"吗?

javascript - 页面中无法识别 JS 方法

java - 从重写的方法中获取对象