簡體   English   中英

靜態的 <T extends Number & Comparable<? super Number> &gt;

[英]static <T extends Number & Comparable<? super Number>>

我有一個靜態方法跟隨類:

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不能應用於給定的類型; required:T,T,T found:java.lang.Integer,java.lang.Integer,java.lang.Integer reason:推斷類型不符合推斷的聲明邊界:java.lang.Integer bound(s) :java.lang.Number,java.lang.Comparable

有任何想法嗎?

謝謝。

嘗試<T extends Number & Comparable<T>>

例如, Integer實現了Comparable<Integer> ,它與Comparable<? super Number>不兼容Comparable<? super Number> Comparable<? super Number> (整數不是Number的超類)。 Comparable<? extends Number> Comparable<? extends Number>也不會工作,因為Java會考慮? 可以是Number任何子類,並且將T傳遞給compareTo則不會編譯,因為它期望參數為? ,不是T

編輯:正如newacct所說, <T extends Number & Comparable<? super T>> <T extends Number & Comparable<? super T>>也會起作用(稍微更一般),因為那時compareTo會接受? 其中T是子類,並且像往常一樣,子類的實例可以作為期望超類的參數給出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM