有人可以解释为什么下一个代码不能编译?
我创建部分专业地图和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