的WildcardError例如產生捕獲錯誤時,編譯:
public class WildcardError {
void foo(List<?> i) {
i.set(0, i.get(0));
}
}
此錯誤示範後,他們通過解決問題輔助方法:
public class WildcardFixed {
void foo(List<?> i) {
fooHelper(i);
}
// Helper method created so that the wildcard can be captured
// through type inference.
private <T> void fooHelper(List<T> l) {
l.set(0, l.get(0));
}
}
一,th EY說,列表輸入參數(i
)被看作是一個Object
:
在該示例中,編譯器處理
i
輸入參數爲類型對象的 。
爲什麼i.get(0)
不返回Object
?如果它已經通過這樣的話?
此外,如果您必須使用使用<T>
的輔助方法,則使用<?>
的意義何在。直接使用T
可以推斷哪個更好?
這就是Eclipse給我的:類型List中的方法set(int,capture#1 of?)不適用於參數(int,capture#2) ?)'聽起來更荒謬。 –
我剛剛寫了一個[解答](http://stackoverflow.com/questions/30797805/understanding-a-captured-type-in-java/30798066#30798066),解釋了另一個問題的通配符捕獲。這些信息似乎也適用於這個問題。 – Lii