摆脱地图中的泛型

时间:2016-05-23 11:36:40

标签: java dictionary hashmap extending

我使用如下的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

周围有办法吗?

编辑:

我开始意识到这是不可能的。至少通过合理的努力是不可能的。我想如果是的话我会发现别人这样做了。但如果某人有一些可以使代码更具可读性的技巧 - 请告诉我。

1 个答案:

答案 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()) { 
}