JavaBean的意义何在?

JavaBean的意义何在?
JavaBean中将属性定义为私有,转而提供getter、setter。这有什么意义?

为什么不直接将属性设为public?getter、setter和公共属性有什么区别(除了能在里面干点别的)?甚至像Lombok那样的,新人表示困惑,望大佬指点,谢谢!

阅读 877
3 个回答
JavaBean中将属性定义为私有,转而提供getter、setter。这有什么意义?
  • 意义其一在于实现面向对象的特性之一封装,对于一个类来说,要做的就是统一管理某些状态,涉及内部实现细节的属性或者说成员都需要私有化,即使需要修改,也必须通过类上的方法去修改,这才能叫管理,如果全部是 public, 拿到类实例就能随便改那管理了个毛线。举个实际点的例子,大型项目上排查问题经常需要定位哪里修改了某个状态,这个时候作为这个类来说,它是一问三不知的,那你作为开发者就能去搜代码,看哪些地方访问了这个属性,能找得你头皮发麻,但有了 getter/setter, 外部对类上属性的访问和修改对于类来说才是可感知的,你只需要在 getter/setter中打断点,跟下调用栈直接就能定位到问题点所在
  • 其二, 遵循开闭原则,对扩展开放,对修改关闭。对于外部来说,你不能直接修改类中的私有成员,这是体现的对修改关闭;提供一个 setter 来让外部修改私有成员的值,这体现的是对扩展开放。这里注意理解,本来外部不能修改,但你提供了一个方法让外部可以改,这就是一种扩展支持
  • 其三,你能直接改我让你能改 完全是两个层面的事情,这里面涉及到一个叫权限控制的概念

groovy解决你所有烦恼,什么Lombok在groovy面前简直弱爆了

Lombok 只是简化了 JavaBean 类的创建,自动生成了 getter, setter与 toString, 省了许多事, 比如极端情况: 一个类有几十个属性, 那就要一百多个方法

将属性设为私有并提供 getter 和 setter 的意义在于:

  • 可以隐藏属性的具体实现细节,防止外部直接访问或修改属性,安全。
  • 通过 getter 和 setter 可以在设置和获取属性值时进行一些额外的逻辑判断或处理,如范围检查、触发事件等。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏