Hi Stuart,

On 9/22/2017 4:37 PM, Stuart Marks wrote:


On 9/22/17 5:36 AM, Roger Riggs wrote:
Hi Stuart,

I'm cautious about doing work piecemeal toward immutable collections.
The current unmodifiable approach only gives partial protection to the caller and none to the callee. The assertions it makes are too weak to be useful.

I'm not entirely sure what you're driving at here. Looking at this again, I can see at least one place that should be strengthened. In List.copyOf, something like this should be added:

    Any modifications to the given Collection are not reflected in the
    returned List.

(And similar for Set.copyOf and Map.copyOf.)

Are there other assertions that should be added or strengthened?

I think more value can be achieved by creating concrete final immutable collections that applications can use to be certain that the semantics of the collection are immutable. They can implement the current interfaces but would be compile time knowable of the complete semantics of mutability.  Then a good bridge between the current streams (and collections) would be methods that return the concrete
final collections.

It would add some value to have concrete, "immutable" collection classes exposed. Presumably though these would implement the List/Set/Map interfaces. As instances get passed around, the "immutable" part would get "cast" away, limiting the value added.
What it enables, is writing a library or implementation in which the immutable never gets cast away. The concrete immutable types would be the *only* types used in the interface to the library. If desired a library might provide convenience functions that accept loosely typed lists/maps/sets and makes copies to effect the assertions. Any objects returned would be the concrete immutable
types and callers could rely upon the full semantics.

I'm suggesting caution now, because if such immutable types become part of SE then the
new methods you are adding should be returning the concrete immutable types
and not the current interfaces with no assertions about immutability.  Adding additional methods with similar names later to return immutable instances will be redundant and create their own kind of
confusion.

Roger


Reply via email to