将public字段改为private并添加getter/setter是提升安全性的最基础重构:可校验输入、脱敏输出、触发关联逻辑,防止状态失控;标准步骤为先加方法、切换调用、再改private,之后可在getter/setter中加入校验、脱敏、日志等控制逻辑。

把 public 字段改成 private,再配上 get/set 方法,是提升变量安全性的最直接、最基础的重构动作。它不改变功能,但能堵住外部随意读写带来的隐患。
为什么字段不能裸着放 public?
public 字段等于把数据大门敞开——任何代码都能直接读、任意改,既无法校验输入(比如年龄传个 -5)、也无法控制输出(比如密码原样返回)、更没法在修改时触发关联逻辑(比如余额变动要记日志)。久而久之,类的状态就容易失控,出错难定位,改起来牵一发而动全身。
封装字段的标准操作步骤
不是简单加个 private 就完事,关键在“平滑过渡”:
- 先为字段添加 public 的 getter 和 setter 方法(IDE 通常支持一键生成)
- 逐个检查所有外部调用该字段的地方:读取 → 改成调用 getter;赋值 → 改成调用 setter
- 每改一处,立刻编译 + 运行对应测试,确保行为没变
- 等所有外部引用都切换完毕,再把原字段声明改为 private
- 最后再整体编译、运行回归测试
封装不只是加 private,更是加控制力
字段私有化之后,真正的价值才开始体现:
- 在 setter 里加校验:比如年龄必须在 0–150 之间,邮箱格式需匹配正则
- 在 getter 里做脱敏:比如返回密码字段时统一返回 "***",而不是明文
- 在属性变更时埋点:比如账户余额变化时自动触发通知或记录审计日志
- 支持延迟加载或计算属性:getter 可以按需生成值,而不必在字段初始化时就占用资源
哪些字段特别建议优先封装?
不用等大重构,日常开发中遇到这些情况,就该马上动手:
- 涉及业务规则的字段:如 status、state、level,它们的变更往往伴随流程跳转
- 敏感信息字段:password、idCard、token、apiKey 等,绝不允许外部直读直写
- 被多个类频繁访问的字段:越多人依赖,越需要统一入口来收敛风险
- 未来可能加缓存、日志、权限判断的字段:提前封装,后续扩展成本低得多

















