在 Java9中,为 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)
的情况下。