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.