RFR: 8029055: Map.merge must refuse null values
Brian Goetz
brian.goetz at oracle.com
Thu Dec 5 21:57:50 UTC 2013
Coming late to the party...
Overall I'll +1 this change, with the following nit:
@throws NullPointerException if the specified key or value is null and
* this map does not support null keys or values, or the
* remappingFunction is null
This should be:
@throws NullPointerException if the specified key is null and
* this map does not support null keys, or if the
* value or remappingFunction is null
> See the new thread for the general Javadoc issues. I'll focus on null here.
There is really no choice over the names, or the broad-brush semantics.
These methods came from ConcurrentMap; default methods let us pull
these methods down to all maps (minus atomicity) and have them gain
atomicity in the context of a ConcurrentMap.
The overall "the docs could be better" arguments are well-taken but
we're deep in "the perfect is the enemy of the good" territory. The
choices at this point are: fix the merge(null) problem, or do nothing;
doing nothing seems far worse.
> Yes, I get that nulls in collections are a pain, but trying to
> redefine the meaning of "absent" is more of a pain. I'm aware that
> ConcurrentMap makes things interesting, but these two just look wrong.
> So, my rules would be
OK, but the alternatives look just as wrong from other perspectives, and
we have an existing 10-year-old set of semantics with which to remain
compatible. There's no free lunch here. This is an uneasy compromise,
no matter how you slice it. We can either bring the semantics of these
ConcurrentMap methods down to Map, or we can not bring them to Map at
all. With these semantics, they're imperfect, but still darn useful.
More information about the core-libs-dev
mailing list