RFR(m): 8177290 add copy factory methods for unmodifiable List, Set, Map

Stuart Marks stuart.marks at oracle.com
Wed Nov 29 05:21:41 UTC 2017


On 11/22/17 8:45 AM, Remi Forax wrote:
> I think i prefer toImmutableList() than toUnmodifiableList() because the List
> is truly immutable and not an unmodifiable proxy in front of a mutable List
> (like Collections.unmodifiableList() does).

Immutability is like wine.

If you put a spoonful of wine in a barrel full of sewage, you get sewage. If you 
put a spoonful of sewage in a barrel full of wine, you get sewage. 
(Schopenhauer's Law of Entropy)

Similarly, if you add a little immutability to something mutable, you get 
mutability. And if you add a little mutability to something immutable, you get 
mutability.

To get the desired properties of immutability (e.g., thread-safety, or the 
ability to hand around references safely without making defensive copies), it's 
insufficient for a collection to be "immutable"; you also have to make some 
statements about the contents. It's thus more precise to say that a collection 
is unmodifiable, and to provide a clear definition of an unmodifiable collection.

Although unmodifiable collections have been around since the collections 
framework was introduced, oddly enough the concept has never had a good 
definition. The current proposal includes definitions for unmodifiability, 
unmodifiable collections, and unmodifiable views, and it clearly specifies which 
APIs return unmodifiable views and which return unmodifiable collections.

s'marks




More information about the core-libs-dev mailing list