我代表與其相關的產品品牌,像這樣:集合的地圖與TreeSet的地圖 - 什麼是正確的語法?
- 的Chipotle
- 3迷你玉米餅
- 碗
- 捲餅
- 餅乾店
- 巧克力片cookie
- 花生醬餅乾
- 糖餅乾
在代碼中,這是由TreeMap<String, TreeSet<String>>
表示,作爲品牌將保持按字母順序排序和執行沒有重複的品牌或產品。通過這條線創建:
private TreeMap<String, TreeSet<String>> products = loadProducts(RAW_PRODUCTS);
我還在學習Java的,而不是良好的面向對象的格言一個地方,你可以用最普通類型?所以,我有這種方法,它在這同Map
和做一些處理:
void initProductList(final Map<String, Collection<String>> products)
而且你可以看到TreeMap
已成爲Map
和TreeSet
已成爲Collection
。但每當我試着撥打:
initProductList(products);
編譯器錯誤顯示:
The method initProductList(Map<String,Collection<String>>) in the type AddAlertItem is not applicable for the arguments (TreeMap<String,TreeSet<String>>)
,使其更易於閱讀,這是它是在混淆的區別:
Map<String,Collection<String>>
TreeMap<String,TreeSet<String>>
的區別之間TreeSet
和Collection
正在絆倒它。但我不確定要改變它的工作方式。我可能 downcast方法參數直接指定TreeSet
,但後來我覺得我會限制自己,因爲我可能想在其他地方使用另一種類型的Collection
。
有沒有我沒有想到的,或者一種方法來使這個工作沒有放棄更通用的方法參數?
我在谷歌和這裏搜索了一下,沒有找到任何人處理這個問題。
我意識到,我已經輸入錯誤;我的意思是用有界的通配符而不是直接的'Set'聲明。 – Makoto 2014-09-28 05:35:16
@Makoto謝謝你提醒我。我添加了有界的通配符解決方案。 – Jiang 2014-09-28 05:38:45