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.

Reply via email to