我使用如下的StringMap类来简化Map声明:
public interface StringMap extends Map<String, String> {
interface Entry extends java.util.Map.Entry<String, String>{
}
}
public class StringHashMap extends HashMap<String, String> implements StringMap{
}
问题在于我无法使StringMap.Entry的工作方式与StringMap相同。如果我这样做:
StringMap strings = new StringHashMap(); // this works perfectly fine
for (StringMap.Entry entry : strings.entrySet()) { // this doesn't work
}
我收到此错误:
Error:(402, 49) java: incompatible types: java.util.Map.Entry<java.lang.String,java.lang.String> cannot be converted to com.nicksoft.nslib.StringMap.Entry
周围有办法吗?
编辑:
我开始意识到这是不可能的。至少通过合理的努力是不可能的。我想如果是的话我会发现别人这样做了。但如果某人有一些可以使代码更具可读性的技巧 - 请告诉我。
答案 0 :(得分:1)
这是因为没有重载entrySet()方法来返回类型com.nicksoft.nslib.StringMap.Entry。
由于您无法覆盖entrySet()方法以强制它返回您自己的类型,因此您唯一的选择是重命名它:
public interface StringMap extends Map<String, String> {
interface Entry extends java.util.Map.Entry<String, String>{
}
Set<Entry> myEntrySet();
}
public class StringHashMap extends HashMap<String, String> implements StringMap{
public Set<Entry> myEntrySet() {
//The implementation to return the set of your own entry type.
}
}
然后你的循环看起来像:
for (StringMap.Entry entry : strings.myEntrySet()) {
}