Java - 如何创建新条目(键、值)

2022-08-31 04:47:04

我想创建一个新项目,该项目将包含结构, 。Util.Map.Entrykeyvalue

问题是我无法实例化,因为它是一个接口。Map.Entry

有谁知道如何为Map.Entry创建新的通用键/值对象?


答案 1

公共静态类 AbstractMap.SimpleEntry<K,V>。不要让名称的一部分误导你:它实际上不是一个类(但它的顶级抽象Map是)。Abstractabstract

它是一个嵌套类的事实意味着你不需要一个封闭的实例来实例化它,所以像这样的东西编译得很好:staticAbstractMap

Map.Entry<String,Integer> entry =
    new AbstractMap.SimpleEntry<String, Integer>("exmpleString", 42);

正如在另一个答案中所指出的,Guava还有一个方便的工厂方法Maps.immutableEntry,您可以使用。static


你说:

我无法使用自身,因为显然它是一个只读对象,我无法实例化新的Map.Entryinstanceof

这并不完全准确。您无法直接实例化它(即使用)的原因是因为它是一个界面Map.Entrynew


注意事项和提示

如文档中所述,是 ,因此,如果您坚持使用 5.0,则无法使用。AbstractMap.SimpleEntry@since 1.6

要查找另一个已知的类,您实际上可以直接转到javadoc。从 Java 6 版本implements Map.Entry

接口映射.入口

所有已知的实现类

不幸的是,1.5版本没有列出任何可以使用的已知实现类,因此您可能一直坚持实现自己的实现。


答案 2

Java 9开始,有一个新的实用程序方法允许创建一个不可变的条目,即Map#entry(Object,Object)

下面是一个简单的示例:

Entry<String, String> entry = Map.entry("foo", "bar");

由于它是不可变的,因此调用将抛出一个 .其他限制是它不可序列化,并且由于键或值被禁止,如果它不是你接受的,你将需要使用 AbstractMap.SimpleImmutableEntryAbstractMap.SimpleEntry 代替。setValueUnsupportedOperationExceptionnull

铌:如果您需要直接创建一个具有 0 到最多 10 个(键、值)对的对,则可以改用 Map.of(K 键 1、V 值 1、...) 类型的方法。Map