В Java 9 были введены новые методы factory для интерфейсов 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)
.