Java中private字段配getter是封装核心实践,保障内部可变、外部稳定;支持数据校验、转换、懒加载及权限控制;利于重构且不破坏API;明确读写意图,增强契约可靠性。
Java中把变量设为private,再配getter(有时还有setter),不是为了“多此一举”,而是封装的核心实践——它守住类的边界,让内部实现可变、外部调用稳定。
private堵住了外部直接读写字段的路,但现实里又常需要“有限度地读”。getter就是那个合规出口。它不只返回值,还能嵌入校验、转换或懒加载逻辑。
getAge()可自动根据出生日期计算,不暴露birthDate字段本身getStatus()可返回枚举常量而非原始字符串,避免外部传入非法值一旦字段公开(比如改成public或通过setter暴露),所有调用
方代码就和你的内部结构绑死了。哪天你想把String name换成NameObject,或把内存缓存改为远程查询,所有外部代码都得改。
@Getter生成的也是标准getter,同样享受这个好处只提供getter、不提供setter,明确表达“只读”语义。这比注释更可靠,编译器也能帮检查(比如不可变类final字段 + 无setter)。
Collections.unmodifiableList()包装后的视图,防外部误修改基本上就这些。private + getter不是教条,是用最小约束换最大灵活性。不复杂,但容易忽略背后的契约意识。