java实体类封装规范要求:字段全private+包装类型;布尔字段getter必须isxxx();必须提供public无参及全参构造器;需实现serializable并显式定义serialversionuid。

Java 实体类编写中规范使用封装原则,核心是做到“可控隐藏”:字段私有化、访问受控、行为内聚、接口稳定。不是简单加个 private 就算封装完成,而是要让每个字段的读写逻辑可预期、可校验、可维护。
字段必须全用 private + 包装类型
所有属性声明为 private 是封装的底线。同时禁止使用基本类型(int、boolean、double 等),统一改用包装类(Integer、Boolean、Double)或不可变类型(如 String、LocalDateTime、BigDecimal)。
-
原因:基本类型无法表达
null语义(比如数据库字段允许为空,boolean isActive却只能是true或false) -
金额必须用
BigDecimal:避免浮点精度丢失,且天然支持null表达“未设置”状态 -
布尔字段对应数据库
TINYINT(1)或BIT时,类型必须是Boolean,getter 命名为isActive()而非getActive()
Getter/Setter 必须严格遵循 JavaBeans 规范
这是框架识别属性的基础。Jackson、MyBatis、Hibernate 等都依赖标准命名,不合规会导致静默映射失败。
-
布尔字段 getter 必须是
isXxx()(如isDeleted()),setter 仍为setDeleted(Boolean deleted) -
禁止自定义命名:如
getUser_name()、changeName()、fetchEmail()等,框架无法识别 -
setter 内只做赋值和轻量校验:例如
Objects.requireNonNull(name, "name must not be null")可以,但不能查数据库、发消息、调远程接口 -
getter 不应有副作用:避免在
getFullName()中拼接字符串并缓存,这类逻辑应移出实体类,放在 VO 或 Service 层
构造器只保留无参 + 全参(或 Builder)
无参构造器是 ORM 和 JSON 反序列化的刚需;全参构造器保障对象创建即完整,避免半初始化状态。
- 必须提供 public 无参构造器:MyBatis 默认通过反射调用它创建实例
-
禁用“漏字段”的有参构造器:例如只有
User(Long id, String name),却忽略createTime和status,易引发空指针或业务误判 -
字段超过 4–5 个时,优先用静态内部 Builder 类:比长参数列表更清晰,也比 Lombok 的
@AllArgsConstructor更可控(后者可能随字段增减意外破坏兼容性) - 全参构造器参数顺序建议与字段声明顺序一致:降低阅读和维护成本
实现 Serializable 并显式定义 serialVersionUID
只要实体类可能被序列化(网络传输、缓存、日志落盘等),就必须实现该接口并固定 UID。
- 不加
serialVersionUID看似能编译,但类结构一变(增删字段、改修饰符),反序列化直接抛InvalidClassException -
推荐值用
1L或时间戳形式(如20261013L):便于版本追踪,避免随机数带来的不可控性 - 若确定永不序列化(如纯前端 DTO),可不加,但需团队书面约定并写入文档
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











