DEV Community

Code Green
Code Green

Posted on

How to create a immutable class in java? explain with example

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);
        }
    }
Enter fullscreen mode Exit fullscreen mode

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() + ")");
        }
    }
Enter fullscreen mode Exit fullscreen mode

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)

Collapse
 
devtom profile image
DevTom

Scenario it can be used?

Collapse
 
marawan_mohamed_f83d463ea profile image
Marawan Mohamed

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.