Records, Sealed Classes, and Enums

Modern Java provides concise tools for domain modeling. A record is ideal for transparent, mostly immutable data carriers. A sealed type restricts which types may extend or implement an abstraction. An enum models a fixed set of named constants.

public record Point(int x, int y) {}

public sealed interface Result
        permits Success, Failure {}

public record Success(String value) implements Result {}
public record Failure(String reason) implements Result {}

enum Status {
    NEW, PROCESSING, COMPLETED, FAILED
}

Records generate accessors, a canonical constructor, equals, hashCode, and toString. They do not make referenced objects deeply immutable.

Key Takeaways
  • Records reduce boilerplate for data-centric types.
  • Sealed types make an inheritance boundary explicit.
  • Records are shallowly immutable; referenced mutable objects can still change.