爲OCPJP 6考試做準備(這就是爲什麼我使用Java 1.6編譯器)我注意到了我對Java泛型的一些不清楚。 考慮下面的代碼:Java泛型類型參數不在其範圍內
class A<K extends Number> {
public <V> V useMe1(A<? super V> a) { // OK
return null;
}
public <V> V useMe2(A<? extends V> a) { // OK
return null;
}
public <V> V useMe3(A<V> a) { // ERROR, but why, since 2 above were ok
return null;
}
}
當我嘗試編譯代碼(1.6編譯器),我得到的錯誤:
type parameter V is not within its bound
儘管上面的代碼的unusability,我不知道爲什麼編譯器認爲類型<? super V>
和<? extends V>
與綁定的類類型匹配,但<V>
不是(因爲V與這兩個邊界匹配)。
我不打算修改該代碼,我想了解它。該代碼取自示例OCPJP 6考試問題,詢問「哪一行將編譯?」
'useMe2'不能用Java 8編譯。 – assylias
第二個不能編譯:/ –