About
Immutable object in Java Concurrency.
Articles Related
Rules
- Don't provide “setter” methods — methods that modify fields or objects referred to by fields.
- Make all fields final and private.
- Don't allow subclasses to override methods. The simplest way to do this is to declare the class as final. A more sophisticated approach is to make the constructor private and construct instances in factory methods.
- If the instance fields include references to mutable objects, don't allow those objects to be changed:
- Don't provide methods that modify the mutable objects.
- Don't share references to the mutable objects. Never store references to external, mutable objects passed to the constructor; if necessary, create copies, and store references to the copies. Similarly, create copies of your internal mutable objects when necessary to avoid returning the originals in your methods.
Library
- com.google.common.collect (Guava)
List<Table> allTables = ImmutableList.copyOf(Table.values());
- Builder Pattern with immutability ie final variable
final String value1;
final Boolean blue;
private Session(String value1, boolean isBlue)
{
this.value1 = value1;
this.isBlue = isBlue;
}
public Session withBlue(boolean isBlue)
{
return new Session(
this.value1,
this.isBlue
);
}
Collections
since Java10, Create new collection instances from existing instances
- List.copyOf,
- Set.copyOf,
- and Map.copyOf .
Stream
Stream New methods toUnmodifiableList, toUnmodifiableSet, and toUnmodifiableMap have been added to the Collectors class in the Stream package.