有人可以解釋爲什麼下一個代碼不能編譯?
我創建部分專業地圖和Map.Entry的吧:java中的泛型專業化
public class Trie<T> implements Map<String, T> {
private class TrieEntry<S> implements Map.Entry<String, S> {
// stupid implementation here
}
// uninterested code here
}
這裏一切都很好,但後來我採取的entrySet()方法:
public Set<java.util.Map.Entry<String, T>> entrySet() {
Set<java.util.Map.Entry<String, T>> x = new HashSet<TrieEntry<T>>();
// some uninterested code here
}
Eclipse中說:
「類型不匹配:不能轉換從HashSet<Trie<T>.TrieEntry<T>>
到Set<Map.Entry<String,T>>
」
所以,在我的腦海TrieEntry<T>
應展開爲Map.Entry<String, T>
,它符合定義中的表達式。
我在哪裏錯了?
是的,我有點混淆類型鑄造。感謝您的澄清。 – stborod 2012-04-08 21:35:07
爲什麼不能解決?剛剛創建一個'Set> x = new HashSet >();'然後把'TrieEntry'對象放到它裏面呢? –
newacct
2012-04-08 23:21:09
@newacct通過「not solvable」我的意思是,它不可能讓'entrySet()'返回'Set>' - 當然你可以返回一個'Set >',把'TrieEntry (參見傑斯帕斯的回答!),但這不會是類型安全的,這就是泛泛而談的一切。例如,可以從'Trie'繼承並創建一個子類,其中'entrySet()'不再返回'TrieEntry' - 所以你需要typechecks和typecasts來保證類型安全。 –
Anthales
2012-04-09 10:29:35