[英]Difference between generics <T extends Number & Comparable<T>> and T extends Comparable<? extends Number>
[英]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.