An immutable object is an object whose state cannot be modified after it is created.
Why Immutable Objects are important?
Because you have no total control : objects can be passed anywhere and can arrive from anywhere in the code. If they are mutable, then any object can modify their state. Different threads can access the same model object and modify/read its state creating many problems difficult to handle.
What is an Immutable object?
Final private fields, No Setters & Unmodifiable collections
An example ?
What does Lombok?
Project Lombok aims to reduce boilerplate codes by replacing them with a simple set of annotations.
How to install Lombok?
see here : https://projectlombok.org/download.html
Create a model object called Home with the following fields :
String address;The street name of your home
How old were you when you enter this house
int fromYear;Which year you start living there
int toYear;Which year you left
Create a toString() method to print the details.
Create a class called MyHomes that prints the list of Homes you lived in.
This class should create as many homes you lived in and print the details for each one of them.
Now make the class immutable
Now try to clean the Home class code with Lombok!!
Hints / Immutability support :-
How can we change a value?
Add an immutable boolean field to indicate if the address has been verified.
Default should be false.
Add a method to MyHomes to verify a List of Homes
Now try to use the @Wither annotation from Lombok!!
End of the workshop