參考:Wildcard Capture Helper Methods爲什麼要使用通配符捕獲方法?
它說創建一個輔助方法來捕獲通配符。
public void foo(List<?> i) {
fooHelper(i);
}
private <T> void fooHelper(List<T> l) {
l.set(0, l.get(0));
}
僅僅在下面使用這個函數不會產生任何編譯錯誤,並且似乎以同樣的方式工作。我不明白的是:爲什麼你不使用這個,並避免使用助手?
public <T> void foo(List<T> l) {
l.set(0, l.get(0));
}
我認爲這個問題真的可以歸結爲:通配符和泛型之間有什麼區別?所以,我去了這個:difference between wildcard and generics。 它說,使用類型參數:
1) If you want to enforce some relationship on the different types of method arguments, you can't do that with wildcards, you have to use type parameters.
但是,是不是正是與助手功能通配符實際上是在做什麼?它是不是通過設置和獲取未知值來強制執行不同類型的方法參數的關係?
我的問題是:如果你有定義的東西,需要不同類型的方法參數的個數有關係,那麼爲什麼首先使用通配符,然後使用一個輔助的功能呢?
好像納入通配符哈克的方式。
不,我不是看過那個 –