在Java 9,新的工厂方法已经出台了List
,Set
和Map
接口。这些方法允许快速实例化一行中包含值的Map对象。现在,如果我们考虑:
Map<Integer, String> map1 = new HashMap<Integer, String>(Map.of(1, "value1", 2, "value2", 3, "value3"));
map1.put(4, null);
如果我们这样做,则上面的内容毫无例外地被允许:
Map<Integer, String> map2 = Map.of(1, "value1", 2, "value2", 3, "value3", 4, null );
它抛出:
Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.Objects.requireNonNull(Objects.java:221)
..
我无法获得,为什么在第二种情况下不允许null。
我知道HashMap可以将null作为键和值,但是在Map.of的情况下为什么要限制它呢?
java.util.Set.of("v1", "v2", null)
和的情况相同java.util.List.of("v1", "v2", null)
。