列出我想要一個Map
幾個名單,他們每個人Comparable
對象組成的,但並不總是相同的,所以有可能是一個Doubles
和List
的Strings
一個List
,等...通用地圖與可比
Map<String, List<Comparable<?>>>
不幸的是,Map
如上所定義,因爲在每個List
元件不能相比不會是有用的。因此,我不得不欺騙和引入類型參數到類:
class MyClass<T extends Comparable<? super T>> {
Map<String, List<T>> myMap;
}
這並不完全正確,因爲不是所有的列表是相同類型的。但它是有效的,我必須做的唯一事情就是當我將Double
添加到雙列表或String
到字符串列表中時,將類型轉換爲T
。我確保每種類型都只添加到正確類型的列表中。
有沒有更好的方法來解決這個問題?
另一種方法是對每種類型的List
都有一個Map
。但是這隻會使代碼更醜,我只能對列表進行排序並將它們作爲字符串值插入到數據庫中,因此我只能在可比較對象上調用toString
。
您可以使用['checkedList'](https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#checkedList-java.util.List- java.lang.Class-)來減少錯誤的風險。 – shmosel
由於您無法靜態地告訴Java編譯器「List」中元素的類型,您甚至不能確保其中一個列表中的元素可以相互比較。總之,你應該不這樣做,或者接受你繞過靜態類型檢查,例如通過聲明它爲'Map>',使用原始泛型類型'Comparable'。然後接受編譯器警告,告訴您您正在繞過靜態類型檢查。 –
Andreas
@shmosel哇,我怎麼從來沒有聽說過這個?謝謝:) – Roland