我们知道面向对象设计项目的时候,特别是Java项目,属性一般有getter/setter方法,
但是有时候我们又是直接使用类实例的属性(直接点出)
请问下:
1、推荐给所有属性都加getter/setter方法,然后设置属性为私有吗?
2、什么场景对属性使用getter/setter,什么场景不对属性使用呢?
我们知道面向对象设计项目的时候,特别是Java项目,属性一般有getter/setter方法,
但是有时候我们又是直接使用类实例的属性(直接点出)
请问下:
1、推荐给所有属性都加getter/setter方法,然后设置属性为私有吗?
2、什么场景对属性使用getter/setter,什么场景不对属性使用呢?
不总是推荐给所有属性都加getter/setter方法,并将属性设置为私有。
虽然这种做法在很多情况下是推荐的(尤其是在封装和隐藏内部实现细节方面),但过度使用getter/setter可能会降低代码的清晰度和简洁性,特别是在那些不需要额外逻辑(如验证、计算或懒加载)的简单属性上。
最佳实践:
使用getter/setter的场景:
不使用getter/setter的场景:
总之,决定是否使用getter/setter取决于具体场景和需求。在保持代码清晰、简洁和可维护性的同时,平衡封装性和直接性是很重要的。
通常,推荐将类的属性设置为私有(private),并提供相应的 getter/setter 方法 来访问和修改这些属性。这是面向对象编程中的封装(encapsulation)原则,它强调将对象的状态与其实现细节隐藏起来,只暴露必要的接口给外部.
不使用 getter/setter,直接访问属性的场景:
内部类或私有类:如果类的作用范围非常小(如仅在同一个文件中使用,或者是一个私有的嵌套类),并且你确定该类不会公开给外部使用,直接访问属性可以简化代码。
个人感觉工业场景下,最好将属性设置为private
,通过 getter/setter 方法访问和修改。
主要是,工业场景下,除了最小知道原则,我们还可以从这些角度理解为什么这样做:
当然,写简单练习题、写力扣和学生时代写demo程序倒不必如此纠结。
27 回答12.8k 阅读
3 回答2.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
6 回答1.1k 阅读✓ 已解决
8 回答2.9k 阅读
4 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
基于最小权利原则,推荐是将类中的属性和方法仅开放必须的权限。因此通常将属性设置为私有,并通过开放方法来选择性地提供getter或setter。
另外一个维度,基于方法去提供属性访问的能力有更好的扩展性,后期可以通过切面或直接修改方法的方式去提供额外的一些能力。
最后,从打工人的角度,getter和setter是增加代码量的。