Creating an Immutable Class in Java
An immutable class is a class whose instances cannot be modified after they are created. This is useful for creating thread-safe applications and ensuring data integrity.
Key Characteristics of an Immutable Class
- All fields are private and final.
- No setter methods are provided.
- Initialization of fields occurs through the constructor.
- Defensive copies of mutable objects are returned when necessary.
Example of an Immutable Class
public final class ImmutablePoint {
private final int x;
private final int y;
public ImmutablePoint(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
// Example of returning a new instance instead of modifying the current one
public ImmutablePoint move(int deltaX, int deltaY) {
return new ImmutablePoint(this.x + deltaX, this.y + deltaY);
}
}
Usage Example
public class Main {
public static void main(String[] args) {
ImmutablePoint point1 = new ImmutablePoint(1, 2);
System.out.println("Point1: (" + point1.getX() + ", " + point1.getY() + ")");
// Moving the point creates a new instance
ImmutablePoint point2 = point1.move(3, 4);
System.out.println("Point2: (" + point2.getX() + ", " + point2.getY() + ")");
System.out.println("Point1 remains unchanged: (" + point1.getX() + ", " + point1.getY() + ")");
}
}
Conclusion
Creating an immutable class in Java involves defining a class with final fields and no setter methods. This ensures that once an object is created, its state cannot be changed. Using immutable classes can lead to safer and more predictable code, especially in concurrent programming scenarios.
Top comments (2)
Scenario it can be used?
You can use immutable classes when multiple threads do operations with the same object but i recommend to use record in this case you won't have to write all of this boilerplate code.