[英]Map.of() vs. Collections.emptyMap()
有没有之间的差异Map.of()
和Collections.emptyMap()
之间List.of()
和Collections.emptyList()
之间Set.of()
和Collections.emptySet()
是的,甚至还有的行为,而不是通过返回的集合彼此只是技术上的差异emptyXyz
在工厂方法Collections
类和新of
在接口(引入工厂方法Map
, List
, Set
)与JDK 9,如果这些与调用没有争论。
有关不同的是,由新返回集合of
工厂方法禁止null
键和值(如API文档中指出,在列表, 设置和地图接口)。 这可能听起来与空集合无关,但即使没有很清楚地记录,即使是新集合实现中的访问器方法也会检查空值。
差异的一些示例:
Collections.emptyList().contains(null)
将返回 false,而List.of().contains(null)
将抛出NullPointerException
。
Collection.emptyMap().getOrDefault(null, V)
将返回V
,而Map.of().getOrDefault(null, V)
将抛出NullPointerException
。
正如目前在 Oracle 的 JDK 9 中实现的那样,至少由新工厂方法返回的集合上的以下方法将抛出NullPointerException
s,但行为“正常”(就像最初设计和指定集合类以支持空键和值一样) ) 使用Collections
类中的旧工厂方法:
List.of().contains(null);
Set.of().contains(null);
Map.of().containsKey(null);
Map.of().containsValue(null);
Map.of().getOrDefault(null, <any>);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.