How do you create an immutable class?
basicCore Java › OOPs (Design-Focused)
Make the class final (or constructors private), all fields private final, no setters, defensively copy mutable inputs in the constructor and outputs in getters, and don't leak this during construction.
public final class Order {
private final List<String> items;
public Order(List<String> items) { this.items = List.copyOf(items); }
public List<String> items() { return items; }
}- Is
Collections.unmodifiableList(list)enough? No; it's a view, mutations of the original show through. UseList.copyOf. - Why
finalclass? To stop a subclass from adding mutability.