RFR: 8024688: j.u.Map.merge doesn't work as specified if contains key:null pair

Paul Sandoz paul.sandoz at oracle.com
Wed Oct 16 12:34:00 UTC 2013


On Oct 16, 2013, at 1:52 PM, David Holmes <david.holmes at oracle.com> wrote:
>>> Perhaps HashMap's implementations should throw CME?
>>> 
>> 
>> Perhaps, seems to be going beyond the call of duty. My inclination is not to bother. It becomes most relevant with forEach since the consumer will have side-effects that might make it easier to unintentionally slip in a modification to the map itself.
> 
> I think there is a lot to be said for consistency.

Yes, i was proposing to consistently not support it for non-traversal methods :-)


> At present it seems we don't have a clear idea on how these methods should be spec'd or how the implementations should behave.

> 
>>> But the possibility of CME has to be allowed for in the spec of the interfaced methods regardless.
>>> 
>> 
>> Ideally by not say anything :-) otherwise perhaps a variant of the following:
> 
> Not saying anything doesn't permit CME to be thrown.
> 

Yeah, it was my poor attempt at a joke wishing CME would go away :-)


>> "If a function value passed to an operation of a non-concurrent map modifies the contents of that map then the result of that operation is undefined.  An implementation may throw {@link ConcurrentModificationException} in such cases and if so that behaviour should be documented."
> 
> I don't think it is the Java spirit to allow for undefined behaviour.

OK.


> Wouldn't:
> 
> @throws CME if the <function> modifies the map and this is detected by the implementation
> 
> give the same flexibility while not being so obviously flimsy?

Reluctantly yes; i know it's more of a style thing but it is somewhat tiresome for each and every method receiving a function value to repeat the same thing.

Paul.

>  I prefer to see exception info on methods as much as practical - with NPE being the obvious exception (no pun intended).
> 




More information about the core-libs-dev mailing list