Uploaded image for project: 'Spring Data Commons'
  1. Spring Data Commons
  2. DATACMNS-1381

Support for immutable collection types



    • Type: Improvement
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: Mapping / Conversion
    • Labels:


      Currently the MappingMongoConverter makes a static call to CollectionFactory.createCollection and CollectionFactory.createMap. And currently CollectionFactory does not support any of the Guava Immutable collection. Until Java comes up with a List interface that expresses that it is Immutable, I believe there is still good reason to declare class fields as ImmutableList instead of just List. For this reason it would be create to provide a mechanism to support these collections: ImmutableList, ImmutableSet, ImmutableMultiSet, ImmutableMap, ImmutableBiMap.

      In order to do this the create method would need to take a set of values to populated in the created collection or a Builder interface would need to be returned.

      Use Case: I have a domain object as below...

      public class MyDomain{
        private List<String> listOfValues;

      I want the above to be thread-safe and so I design it to be immutable. When I create it I appropriate use ImmutableList. However, in the above there are two issues: 1) the getter returns List which gives the caller no indication that it is immutable 2) when marshalled via Spring Data it is created as a mutable List thereby breaking my thread-safety through immutability. Therefore the below would be better:

      public class MyDomain{
       private ImmutableList<String> listOfValues;



          Issue Links



              olivergierke Oliver Drotbohm
              dancerjohn John Butler
              Last updater:
              Oliver Drotbohm
              1 Vote for this issue
              4 Start watching this issue