Why does Map.of not allow null keys and values?

前端 未结 8 1296
清酒与你
清酒与你 2021-01-31 06:37

With Java 9, new factory methods have been introduced for the List, Set and Map interfaces. These methods allow quickly instantiating a Ma

8条回答
  •  温柔的废话
    2021-01-31 07:37

    In my opinion non-nullability makes sense for keys, but not for values.

    1. The Map interface becomes a weak contract, you can't trust it's behaviour without looking at the implementation, and that is assuming you have access to see it. Java11's Map.of() does not allow null values while HashMap does, but they both implement the same Map contract - how come?
    2. Having a null value or no value at all could not, and arguably should not be considered as a distinct scenario. When you get the value for a key and you get null, who cares if it was explicitly put there or not? there's simply no value for the supplied key, the map does not contain such key, simple as that. Null is null, there's no nullnull or null^2
    3. Existing libraries make extensive use of map as a means to pass properties to them, many of them optional, this makes Map.of() useless as a construct for such structures.
    4. Kotlin enforces nullability at compile time and allows for maps with null values with no known issues.
    5. The reason behind not allowing null values is probably just due to implementation detail and convenience of the creator.

提交回复
热议问题