An immutable class is a class whose state cannot be changed. This can be done in three ways.
- Private: If a field is private, it cannot be externally changed. If it's a final, you cannot accidentally change it.
- Do not provide the setter: In support to the earlier point, if the fields are private and no setter is provided, this class fields always remain the same.
- Declare as final: Sub-classes should not be able to override the methods.
Pro's:
- Immutable
objects can make life easier. An immutable object is automatically
thread-safe, and it has no synchronization issues. They make concurrent
programming safer and cleaner.
- Immutable
objects do not need a copy constructor or an implementation of clone. For
the sake of simplicity.
- When an immutable object throws any exception, it will
never result with the object left in an indeterminate state. - atomicity
by Joshua Bloch in Effective Java
Con's:
- Making copies of objects in order to mutate them can drain our resources, especially when dealing with complex data structures. Also, changing objects with a distinct identity can be also more intuitive.
In Effective Java, Joshua Block writes:
“Classes should be immutable unless there’s a very good reason to make them mutable. If a class cannot be made immutable, limit its mutability as much as possible.”
Immutability can solve many problems and make your life easier, especially when it comes to working in a concurrent environment.
0 comments:
Post a Comment