java - 摆脱 Map 中的泛型

标签 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

有办法解决吗?

编辑:

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

最佳答案

这是因为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()) { 
}

关于java - 摆脱 Map 中的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37389936/

相关文章:

java - Whatsapp 共享在 Webview 中不起作用

java - Spring Security 问题 - 404 错误

java - HashMap: java.lang.NullPointerException: 尝试调用虚拟方法 'java.lang.Object java.util.HashMap.put'

java - 如何在具有特定优先级列表的元素之间进行选择?

java - 扫描仪异常 : java. util.InputMismatchException

java - 使用 JAVA 将希伯来语写入 mySql

python - 我们可以在 Python 中使用并发和混合的字典吗?

python - 内存使用,使用 Dict 与使用键和值列表填充 Pandas DataFrame

python - 使用 python 将 API 响应排序为 excel 或 csv。 Python

Java:在 HashMap 中添加新项目