假設我有一個具有以下簽名的函式:
<T> T f(List<T> a, T b)
顯然,我可以執行以下操作:
List<Integer> list = new ArrayList<Integer>();
int x = 0;
int y = f(list, x);
但是,我不允許這樣做:
List<List<?>> list = new ArrayList<List<?>>();
List<Integer> x = new ArrayList<Integer>();
List<Integer> y = f(list, x);
在這種情況下,我想要的是這樣的簽名:
<T, V> T<V> foo(List<T<?>>, T<V> x)
但是,這樣做有兩個問題。首先,Java 根本不允許我這樣做,參考Type 'T' does not have type parameters. 其次,我假設我描述的第一個場景不再可能。
所以,我的問題是:有沒有辦法撰寫一個允許上述兩種情況的簽名函式?
uj5u.com熱心網友回復:
你可以這樣做。這編譯:
List<List<Integer>> list = new ArrayList<>();
List<Integer> x = new ArrayList<>();
List<Integer> y = f(list, x); // T is List<Integer>
如果您想要一個單獨的方法來處理串列T:
<T> List<T> fList(List<List<T>> a, List<T> b)
List<List<Integer>> list = new ArrayList<>();
List<Integer> x = new ArrayList<>();
List<Integer> z = fList(list, x); // T is Integer
uj5u.com熱心網友回復:
<T> T f(List<? super T> a, T b)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/449165.html
上一篇:作用于創建的div變數
