![](/img/trans.png)
[英]Java Generics :The method compareTo(capture#2-of ? extends E) in the type Comparable is not applicable for the arguments (Comparable)
[英]java generics - The method evaluate(T,T) in the type T is not applicable for the arguments (Comparable, Comparable<capture#11-of ?>)
由於我將Java版本升級到8,因此通用方法出現了問題。調用如下:
Operator o;
Comparable a;
Comparable<?> b;
boolean match = o.evaluate(a, b)
和方法
public enum Operator{
public <T extends Comparable<T>> boolean evaluate(T value1, T value2) {
if (value1 == null && value2 != null) {
return false;
}
switch (this) {
//some code here
}
}
}
唯一的例外是:運算符類型中的方法validate(T,T)不適用於自變量(可比較,可比較)
提前致謝!
evaluate
期望使用已知為相同類型的參數,可以將其與自身進行比較,但事實並非如此。
您的通用方法有兩個條件:
但是,您要傳遞兩個參數,嚴格來說,它們不是同一類型。 其中一個是原始的Comparable對象(其基本類型是Object),另一個是非原始的Comparable,但是具有未知的基本類型。
實際上,您可以為b分配一個整數,並且與原始的Comparable不嚴格兼容。
使用a.compareTo(b)
不會導致編譯時錯誤,因為a
是原始Comparable,它將接受任何Comparable對象,但會認為它是Comparable,並且b
可以強制轉換為Object
。 這就是原始類型的工作方式。 如果兩個對象不匹配,則只會得到警告和運行時錯誤。
但是,使用b.compareTo(a)
會導致編譯時錯誤,因為已知b具有基本類型,但目前尚不知道它是什么。 因此,未知Comparable<Object>
是否可以強制轉換為它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.