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