import java.util.Map;
final class MyEntry implements Map.Entry {
private final K key;
private V value;
public MyEntry(K key, V value) {
this.key = key;
this.value = value;
}
@Override
public K getKey() {
return key;
}
@Override
public V getValue() {
return value;
}
@Override
public V setValue(V value) {
V old = this.value;
this.value = value;
return old;
}
}
然后再使用它。
Map.Entry entry = new MyEntry("Hello", 123);
System.out.println(entry.getKey());
System.out.println(entry.getValue());
有[
public static class AbstractMap.SimpleEntry
](http://java.sun.com/javase/6/docs/api/java/util/AbstractMap.SimpleEntry.html)。不要让名字中的 "抽象 "部分误导你:事实上,它不是一个 "抽象 "类(但它的顶层AbstractMap
是)。它是一个 "静态 "的嵌套类,这意味着你不需要一个包围的 "AbstractMap "实例来实例化它,所以像这样的东西编译起来很好。
正如在另一个答案中指出的,Guava还有一个方便的
静态
工厂方法Maps.immutableEntry
,你可以使用。你说
我不能使用
Map.Entry
本身,因为显然它是一个只读对象,我不能实例化新的instanceof
。这并不完全准确。你不能直接实例化它(即用
new
)的原因是它是一个[interface Map.Entry
](http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html)。注意事项和提示
正如文档中所指出的,
AbstractMap.SimpleEntry'是
@自1.6以来',所以如果你坚持使用5.0,那么它就对你无效了。要寻找另一个`实现Map.Entry'的已知类,事实上你可以直接去看javadoc。来自Java 6版本
不幸的是,1.5版本并没有列出任何你可以使用的已知实现类,所以你可能只能自己实现。
你可以自己实现
Map.Entry
接口即可。然后再使用它。
尝试Maps.immutableEntry from Guava
这样做的好处是与Java 5兼容(不像
AbstractMap.SimpleEntry
那样需要Java 6。)