我有一個類FourByFourBoard
,它擴展了GameBoard
。我定義了以下字段:帶泛型的Java集合給我提供了不適用的參數錯誤
private Map<Integer,List<Key<? extends GameBoard>>> mGameTypeToKeysMap = new Hashtable<Integer,List<Key<? extends GameBoard>>>();
private List<Key<FourByFourBoard>> mFourByFourBoardKeys = new ArrayList<Key<FourByFourBoard>>();
在我的構造函數中,我嘗試撥打:
mGameTypeToKeysMap.put(Game.FOUR_BY_FOUR, mFourByFourBoardKeys);
但我得到這個:
在類型的方法
put(Integer, List<Key<? extends GameBoard>>)
Map<Integer,List<Key<? extends GameBoard>>>
不適用於 參數(int, List<Key<FourByFourBoard>>)
我可以使用一種不同的方法來做我想做的事情,但在盯着代碼一會兒之後,我無法弄清楚爲什麼這種方式不起作用。
編輯
比我想的這個問題可能比較簡單:
如果我嘗試:
Key<GameBoard> a = mFourByFourBoardKeys.get(0);
我得到:
類型不匹配:不能轉換
Key<FourByFourBoard>
至Key<GameBoard>
即使:
GameBoard someBoard = new FourByFourBoard();
是合法的。所以這仍然是一個泛型問題,但集合部分並不重要。而我的頭還在旋轉一點。
Key是Objectify的一個類,如果有幫助的話。 http://objectify-appengine.googlecode.com/svn/trunk/javadoc/com/googlecode/objectify/Key.html – 2012-01-08 23:29:20