我有一個List<? extends Serializable>
其中包含一個Integer
列表,我希望它被排序。我不能在這裏使用Collection.sort()
。有一個例外說什麼是排序序列化列表的理想方式Java
推斷的類型捕獲#2的?擴展序列化是不是一個有效 替代有界參數>
什麼是理想的方式?
我有一個List<? extends Serializable>
其中包含一個Integer
列表,我希望它被排序。我不能在這裏使用Collection.sort()
。有一個例外說什麼是排序序列化列表的理想方式Java
推斷的類型捕獲#2的?擴展序列化是不是一個有效 替代有界參數>
什麼是理想的方式?
List<? extends Serializable> list = Arrays.<Integer> asList(2, 3);
在這裏,我們要創建一個List<Integer>
但我們扔掉編譯器的知識要素是Integer
。所有編譯器都知道list
是它包含Serializable
類型的元素。
Collections.sort(list);
...不會編譯。沒有方法稱爲Collections.sort()
,它接受list
所具有的任何類型的單個元素。有Collections.sort(List<? extends Comparable>)
,但我們的list
不適合這個。我們可以使用Collections.sort(List<T> list, Comparator<? super T> c)
- 我們只需要提供Comparator<? extends Serializable>
。
這就是問題所在。沒有什麼關於Serializable
有意義的比較。所有你能做的就是一個不安全的轉換:
Collections.sort(list, Comparator.comparing(x -> (Integer) x));
你知道這會工作,因爲你已經安排那list
實際上包含Integer
- 但鑄像,這是一個代碼味道。如果你的班級需要輸入Integer
的列表,然後通過List<Integer>
。
Collections.sort(list, Comparator.comparing(x -> (Comparable) x));
...也有效,但有相同的氣味。
那麼,你可以通過簡單地說'Collections.sort(list,null)'或'list.sort(null)'來完全繞過檢查,即使編譯時類型不知道。 – Holger
按照什麼排序? – Kayaman
排序的條件是什麼? 'Serializable'不提供關於比較或排序順序的任何信息。 – dpr
**爲什麼**不能使用'Collections.sort()'? – slim