Java - 如何创建新条目(键、值)
我想创建一个新项目,该项目将包含结构, 。Util.Map.Entry
key
value
问题是我无法实例化,因为它是一个接口。Map.Entry
有谁知道如何为Map.Entry创建新的通用键/值对象?
我想创建一个新项目,该项目将包含结构, 。Util.Map.Entry
key
value
问题是我无法实例化,因为它是一个接口。Map.Entry
有谁知道如何为Map.Entry创建新的通用键/值对象?
有公共静态类 AbstractMap.SimpleEntry<K,V>
。不要让名称的一部分误导你:它实际上不是一个类(但它的顶级抽象Map
是)。Abstract
abstract
它是一个嵌套类的事实意味着你不需要一个封闭的实例来实例化它,所以像这样的东西编译得很好:static
AbstractMap
Map.Entry<String,Integer> entry =
new AbstractMap.SimpleEntry<String, Integer>("exmpleString", 42);
正如在另一个答案中所指出的,Guava还有一个方便的工厂方法Maps.immutableEntry
,您可以使用。static
你说:
我无法使用自身,因为显然它是一个只读对象,我无法实例化新的
Map.Entry
instanceof
这并不完全准确。您无法直接实例化它(即使用)的原因是因为它是一个界面Map.Entry
。new
如文档中所述,是 ,因此,如果您坚持使用 5.0,则无法使用。AbstractMap.SimpleEntry
@since 1.6
要查找另一个已知的类,您实际上可以直接转到javadoc。从 Java 6 版本implements Map.Entry
接口映射.入口
所有已知的实现类:
不幸的是,1.5版本没有列出任何可以使用的已知实现类,因此您可能一直坚持实现自己的实现。
从Java 9开始,有一个新的实用程序方法允许创建一个不可变的条目,即Map#entry(Object,Object)
。
下面是一个简单的示例:
Entry<String, String> entry = Map.entry("foo", "bar");
由于它是不可变的,因此调用将抛出一个 .其他限制是它不可序列化,并且由于键或值被禁止,如果它不是你接受的,你将需要使用 AbstractMap.SimpleImmutableEntry
或 AbstractMap.SimpleEntry
代替。setValue
UnsupportedOperationException
null
铌:如果您需要直接创建一个具有 0 到最多 10 个(键、值)对的对,则可以改用 Map.of(K 键 1、V 值 1、...)
类型的方法。Map