属性私有化后应通过语义化getter/setter提供友好接口:布尔属性用is前缀,集合返回不可变视图,setter嵌入轻量校验与默认处理,配合构造器或Builder确保对象有效性。

属性私有化后提供友好接口,核心是用好 getter/setter 方法,并兼顾可读性、安全性与易用性。不是简单套模板,而是让调用者感觉自然、安全、不困惑。
命名规范要贴合语义
方法名不是机械拼接,而应符合日常表达习惯:
- 普通属性:用 get + 首字母大写属性名(如
getName()、getAddress()) - 布尔属性:优先用 is + 首字母大写属性名(如
isActive()、isStudent()),比getActive()更自然 - 避免歧义命名:比如
getCount()应明确是总数量、有效数量还是缓存数量;必要时加注释或改名(如getValidItemCount())
setter 方法里嵌入轻量校验和默认处理
用户传错值时,不抛异常也能“兜住”,体验更友好:
- 对空字符串、负数、超长文本等常见问题做静默处理或友好提示
- 支持合理默认值:比如
setAge(-5)可自动设为0并记录日志,而不是直接报错中断流程 - 统一格式化输入:如
setName(" Li Lei ")自动 trim 后存储,对外保持干净数据
getter 方法可返回不可变视图或计算结果
不暴露原始对象,也不让用户操心内部逻辑:
立即学习“Java免费学习笔记(深入)”;
- 集合类属性(如
private List<String> tags)不直接返回原 list,而是用Collections.unmodifiableList(tags)或返回新副本 - 需要计算的字段(如 “全名” = 姓 + 名),提供
getFullName(),隐藏拼接细节 - 敏感字段(如密码)的 getter 可返回掩码字符串(
"****")而非真实值
配合构造器与 Builder 模式提升初始化体验
私有属性不等于难创建,好的接口也体现在对象诞生那一刻:
- 关键必填属性通过构造器强制传入,避免对象处于无效状态(如
new User("zhangsan", "123456")) - 可选属性多时,提供静态内部 Builder 类,链式调用清晰直观:
User.builder().name("Li").age(25).build() - IDE 自动生成 getter/setter 时,可手动优化参数校验和文档注释,别全盘依赖生成代码


















