首页
学习
活动
专区
圈层
工具
发布

我应该将我的getter/setter与他们的变量分组吗?

在面向对象编程中,是否将getter/setter与对应的成员变量分组属于代码组织风格的范畴。以下是综合分析:

基础概念

  1. 封装原则:Getter/Setter是封装成员变量的标准方式,用于控制访问和修改数据的行为。
  2. 代码可读性:分组与否影响代码的视觉结构和逻辑关联性。

分组方案对比

| 方案 | 示例代码 | 优势 | 劣势 | |-------------------|--------------------------------------|----------------------------------|----------------------------------| | 变量与方法分组 | java<br>class User {<br> private String name;<br><br> public String getName() { ... }<br> public void setName() { ... }<br><br> private int age;<br><br> public int getAge() { ... }<br> public void setAge() { ... }<br>} | 1. 快速定位变量相关操作<br>2. 符合"高内聚"原则 | 1. 可能分散同类方法(如所有getters)<br>2. 大文件中增加纵向长度 | | 按方法类型分组 | java<br>class User {<br> private String name;<br> private int age;<br><br> // Getters<br> public String getName() { ... }<br> public int getAge() { ... }<br><br> // Setters<br> public void setName() { ... }<br> public void setAge() { ... }<br>} | 1. 同类操作集中管理<br>2. IDE可通过方法类型快速筛选 | 1. 变量与操作分离<br>2. 修改时需要跨区域查看 |

应用场景建议

  1. 推荐分组的场景:
    • 属性具有复杂逻辑(如校验、计算)
    • 使用Lombok等自动生成工具时(注解通常放在字段上)
    • 团队约定优先考虑可维护性
  • 推荐不分组的场景:
    • 纯数据传输对象(DTO)
    • 需要快速比较所有字段的场合
    • 团队约定优先考虑方法分类

行业实践参考

  • Java规范:Oracle官方代码示例多采用变量与方法分组
  • C#属性语法:语言特性直接支持属性与字段关联(public string Name { get; set; }
  • Python惯例:通常使用@property装饰器与对应变量紧邻定义

特殊处理建议

当存在以下情况时,建议强制分组:

代码语言:txt
复制
class Timer {
  private _startTime: number;
  
  // 需要关联解释的getter
  public get elapsedTime(): number {
    return Date.now() - this._startTime; 
  }
}

工具支持

现代IDE(如VS Code/IntelliJ)可通过以下方式缓解分组争议:

  1. 代码折叠(按字段折叠关联方法)
  2. 结构视图(同时显示字段和方法)
  3. 快速导航(Ctrl+点击跳转)

最终决策应基于:

  1. 项目现有代码风格的一致性
  2. 团队成员的认知习惯
  3. 是否需要强调数据与行为的关联性
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

与下属面谈,是我应该做的吗?

了解这些情形后,吴波找了郭华,可郭华觉得效率应该是最需要追求的目标。所以他希望用最节省时间的方式,达到工作要求。 工作效率重要,但良好的沟通绝对会让工作进展更加良性循环。...线上沟通目前也是我们公司的主要沟通方式,但是也让我们的管理者过分依赖于线上,缺乏甚至是逃避与下属面对面的工作交流。 本期案例话题: 线上和线下沟通都有些什么样的优势?...作为管理者,我是否应该更多的和下属面对面交流呢?...,也更能达到目的,了解事情的情况,也便于情感的维护,便于加强团队的凝聚力;缺点:沟通时间成本高,需要有沟通的艺术,沟通点不全,无法事后查阅; 分析: 1.看性格 2.看场合 3.看性别 4.看优先级...5.看距离 6.看沟通渠道数 7.看信息的复杂度 8.看情商 总结: 根据沟通的目的,综合个人情况以及事件的复杂度,挑选不一样的沟通方式,没有所谓哪一种沟通方式比较多;但其实有时比较现实的就是职场无同事

53110

Getter & Setter:使用还是废弃

然而,为什么程序员们都自动在对象中加入getter和setter方法,以此对外暴露私有变量,就如同这些变量是公有的一样?...但是我们不是非常虔诚的那些人。制定规则是有理由的。对于私有属性规则的理由并不适用于这个特例。这是一个特殊的例外,我也告诉人们不要在他们的类中使用公共属性,但也存在例外。...考虑下面的例子 我们通常都认为以上是糟糕的代码风格,因为它破坏了封装性。替代方法是: 有人认为这样封装了属性。这真的实现了封装吗? 实际上,Getter/Setter和封装性没有任何关系。...一个真正完整封装的类是没有setter方法的,而且最好也没有getter方法。类应该负责使用自身的数据计算并返回结果,而不是从某个类获得数据并计算这些数据。...这些完全无意义的getter/setter代码有时会比类的逻辑代码本身还要长,你会多次阅读这些代码,虽然你并不想这么做。 所有的属性都应该保持私有,但对不可改变的属性仅仅增加setter方法。

1.4K60
  • 面向对象的思想,谈面试的过程?

    3)setter 方法中,参数名称与成员变量名称保持一致,采用 this.成员名 = 参数名 的形式。...在初学 Java 编程的时候,我经常产生一个疑惑:为什么不使用 public 修饰成员变量呢?这样做不是比 getter/setter 更方便吗? 我最先想到的答案是这样的: ?...因为不是每个成员变量都需要 getter/setter。 5)每个类都至少会有一个构造方法。初学者可能会非常疑惑:我的那个类真的没有构造方法啊!...Candidate,一个构造方法,两个共有方法,以及成员变量对应的 getter/setter。...当 getter 需要返回一个可变对象的引用时,应该先进行克隆(clone)。以下展示了一个非常简单的克隆方案。

    52720

    哪些代码设计看似是面向对象,实际是面向过程的?

    滥用 getter、setter 方法 在之前参与的项目开发中,我经常看到,有同事定义完类的属性之后,就顺手把这些属性的getter、setter 方法都定义上。...当我问起,为什么要给每个属性都定义 getter、setter 方法的时候,他们的理由一般是,为了以后可能会用到,现在事先定义好,类用起来就更加方便,而且即便用不到这些getter、setter 方法,...对于 itemsCount、totalPrice 两个属性,我们定义了它们的 getter、setter 方法。对于 items 属性,我们定义了它的 getter 方法和 addItem()方法。...而面向对象封装的定义是:通过访问权限控制,隐藏内部数据,外部仅能通过类提供的有限的接口访问、修改内部数据。所以,暴露不应该暴露的 setter 方法,明显违反了面向对象的封装特性。...getter、setter 问题我们就讲完了,我稍微总结一下,在设计实现类的时候,除非真的需要,否则,尽量不要给属性定义 setter 方法。

    92061

    不,这样的 DTO!

    这时候这位程序员提出了质疑:“DTO 应该使用私有的变量和一套相应的 getter、setter 方法!”,“为什么呢?” 我问。 到底是为什么?...面向对象的信仰如此根深蒂固地影响我们,以至于我们都无法识别出来,这里根本就只是一个数据结构吗?...为什么我们要用一堆毫无用处的 getter、setter 方法,去遵循那些没有人可以解释的通的教条,来膨胀我们的代码呢? 在我的观点中,面向对象程序包含两种实体:对象和数据结构。...但另一方面,对一个单纯的数据结构使用 getter 和 setter 并没有什么好处,一个数据结构只是一种数据简单的容器,没别的了!...getter、setter 方法,这通常意味着这个类一开始就不该是一个类,这个东西只是个数据结构。

    41010

    警惕不规范的变量命名

    Boolean,而isSend使用的是原生类型boolean,而getter,setter方法是使用Intellij IDEA自动生成的,布尔类型生成getter,setter方法时略微特殊,比如原生类型的...,事先我重写了Bar类的toString方法,调用 test(1)看看是否能成功映射。...(),即当类变量的首字母是小写,而第二个字母是大写时,生成的getter,setter应当是(get/set)+类变量名。...但上面已经介绍过了,eBook这样的变量命名本身就是不规范的,在不规范的变量命名下强调规范的getter,setter命名,出发点就错了。...有兴趣的朋友可以在eclipse,intellij idea中试试,这几种规范/不规范的变量命名,各自对应的getter,setter方法是如何的。

    2.2K90

    初级程序员需要知道的基本代码规范

    所以今天我将我在《阿里巴巴Java开发手册》中看到的一些有用的、适合初级程序员的代码基本规范,分享给大家! 1.【强制】大括号的使用约定。...【推荐】 类内方法定义顺序依次是:公有方法或保护方法 > 私有方法 > getter/setter方法。...Service 和 DAO 的 getter/setter 方法放在类体最后。...【推荐】setter 方法中,参数名称与类成员变量名称一致,this.成员名 = 参数名。在getter/setter 方法中,不要增加业务逻辑,增加排查问题的难度。...2) 不允许修改引用的域对象,如:POJO 类的域变量。 3) 不允许被重写的方法,如:POJO 类的 setter 方法。 4) 不允许运行过程中重新赋值的局部变量。

    88721

    为什么有些公司不让用 Lombok ?

    当我们安装好 Lombok 插件后,IDE 便可以识别其酷炫的注解,使用 Lombok 的 @Getter 和 @Setter 注解后,代码会像下面这样看起来很苗条: @Getter @Setter public...如你所愿,可以使用 @ToString 注解去掉对于的方法: @Getter @Setter @EqualsAndHashCode public class MyObject{ private...以上代码行数的变化过程,也许是无数程序员爱上 Lombok 的主要原因吧,这就像一个肥胖的人逐渐变成一个身材苗条的人。 同时也让你看到了一个现象:你以为程序员很懒吗?...于是我不得不将所有的 Lombok 注解从项目源代码中清除,并使用 IDE 自带的功能生成 getter/setter,equals,hashCode,toString 以及构造器等方法,你也可以使用...如果你正在参与一个团队项目(或大型项目), 考虑到后续的升级与扩展,是否使用 Lombok,请与你的团队多沟通和三思。

    1.2K10

    为什么有些公司不让用 Lombok ?装逼?

    当我们安装好 Lombok 插件后,IDE 便可以识别其酷炫的注解,使用 Lombok 的 @Getter 和 @Setter 注解后,代码会像下面这样看起来很苗条: @Getter...如你所愿,可以使用 @ToString 注解去掉对于的方法: @Getter @Setter @EqualsAndHashCode public class...以上代码行数的变化过程,也许是无数程序员爱上 Lombok 的主要原因吧,这就像一个肥胖的人逐渐变成一个身材苗条的人。 同时也让你看到了一个现象:你以为程序员很懒吗?...于是我不得不将所有的 Lombok 注解从项目源代码中清除,并使用 IDE 自带的功能生成 getter/setter,equals,hashCode,toString 以及构造器等方法,你也可以使用...如果你正在参与一个团队项目(或大型项目), 考虑到后续的升级与扩展,是否使用 Lombok,请与你的团队多沟通和三思。

    52330

    Java 最困扰你的那些事

    就算你用了一些加载工具比如Launch4j,你仍然需要让用户安装一个超过200 MB 的框架来运行程序。 没有getter、setter Java还缺少getter和setter注解。...同样的,大整数运算因为同样的原因变的很难使用。 呃, 好吧 没有无符号的基础类型。这尼玛是闹哪样啊! 还是getter、setter 1、null(最大槽点)。...2、没有getter和setter注解(例如,没有属性)。 3、Java 只支持位置参数。我喜欢像Smalltalk 那种支持多样化的参数形式,或者是强制使用关键字参数的Python 3。...如果没有给变量或方法一个修饰符,那么这个方法应该是私有的,而不是包内可见。 默认的修改能力。最终类型(在所有情况下)应该是默认的,并用“var”作为修饰符。...我明白他们为什么存在(而且理论上也说的通),但是他们没为开发者带来什么实质好处。不论你做什么,都不要留一个空的catch 块,就算你认为这个异常永远不会发生。

    93580

    Lombok!代码简洁神器还是代码“亚健康”元凶?

    每个JavaBean都会充斥着如上述getter,setter,equals,hashCode和toString的模板代码,这看起来像一个偏胖的人(不得不承认Java是一个有缺陷的编程语言)。...当我们安装好Lombok插件后,IDE便可以识别其酷炫的注解,使用Lombok的@Getter和@Setter注解后,代码会像下面这样看起来很苗条: @Getter @Setter public class...上面的代码仍然还有改进的空间,我们可以用@EqualsAndHashCode注解替换到equals和hashCode方法: @Getter @Setter @EqualsAndHashCode public...以上代码行数的变化过程,也许是无数程序员爱上Lombok的主要原因吧,这就像一个肥胖的人逐渐变成一个身材苗条的人。同时也让你看到了一个现象:你以为程序员很懒吗?其他有些时候他们比你想象中的还要懒。...于是我不得不将所有的Lombok注解从项目源代码中清除,并使用IDE自带的功能生成getter/setter,equals,hashCode,toString以及构造器等方法,你也可以使用Delombok

    38520

    【译】利用Lombok消除重复代码

    当你在写Getter和Setter时,一定无数次的想过,为什么会有POJO这么烂的东西。你不是一个人!...(不是骂人…)无数的开发人员花费了大量的时间来写这种样板代码,而他们本来可以利用这些时间做出更有价值的输出。...我总结了以下几点: Getter和Setter注解会自动生成getter、setter方法 NoArgsConstructor和AllArgConstructor可以帮助你快速生成构造函数 ToString...你可以查看它生成的Java代码,这一过程被幽默的称为“Delombokisation”。 我应该如何开始使用? Lombok引入了一个额外的编译时依赖。...Lombok是一个提高你的Java生产力的工具。我无法想象没有它时应该怎么写Java程序。真心希望你在读完本文以后能够认识到它的强大!

    1.2K30

    Objective-C属性(property)的特性(attribute)

    (Swift有类似的「Computed Properties/计算属性」) 所以,在没有Objective-C2.0的@property之前,我们几乎需要为所有的实例变量,手动写getter和setter...; 还需要手动声明实例变量(和Objective-C2.0之前一样) 然后在.m文件,还要用@synthesize自动合成getter和setter的实现。...所以,现在我们写@property声明属性,其实是做了三件事 .h: 声明了getter和setter方法; .h: 声明了实例变量(默认:下划线+属性名); .m: 实现了getter和setter方法...这样对比,atomic就显得比较鸡肋了,因为它并不能完全保证程序层面的线程安全,又有额外的性能耗费(要对getter和setter进行加锁操作,我验证过,在某个小项目中将所有的nonatomic删除,内存占用平均升高..., readonly, copy, getter=theNewTitle, setter=setTheNewTitle:, nullable) NSString *newTitle; 不过,应该没有谁闲得蛋疼会这样写的

    2.1K30

    Java复习2-对象与类

    一个class的属性应该只能自己修改,其他class都只是与本class沟通,而不应该有能力修改。比较常见的一个问题是Date属性。...entity,填入字段,然后就直接getter, setter出去,尤其使用lombok后,更是连生成都改自动了。...然而,我们web中需要把对象渲染成json发送出去,jackson会根据getter setter去做序列化和反序列化操作。这个setter还不能关闭。 那就只能处理User自己了。...StringBuilder sb = new StringBuilder(); appendOne(sb); appendOne执行过程中会对sb产生影响吗? 这就要看具体方法内容了。...另外,能用包装类就不用基本类型; 不是所有的成员变量都应该提供对外访问方法,比如创建日期不可以修改; 将职责过多的类进行分解; 类名和方法名要能够体现他们的职责; 优先使用不可变的类。

    75840

    为什么要放弃 Lombok ?

    当我们安装好Lombok插件后,IDE便可以识别其酷炫的注解,使用Lombok的@Getter和@Setter注解后,代码会像下面这样看起来很苗条: @Getter @Setter public class...既然其他方法都替换掉了,那把toString方法也一起拿掉吧.如你所愿,可以使用@ToString注解去掉对于的方法: @Getter @Setter @EqualsAndHashCode public...以上代码行数的变化过程,也许是无数程序员爱上Lombok的主要原因吧,这就像一个肥胖的人逐渐变成一个身材苗条的人。同时也让你看到了一个现象:你以为程序员很懒吗?其他有些时候他们比你想象中的还要懒。...于是我不得不将所有的Lombok注解从项目源代码中清除,并使用IDE自带的功能生成getter/setter,equals,hashCode,toString以及构造器等方法,你也可以使用Delombok...如果你正在参与一个团队项目(或大型项目),考虑到后续的升级与扩展,是否使用Lombok,请与你的团队多沟通和三思。

    1.2K20

    再见!Lombok ...

    当我们安装好Lombok插件后,IDE便可以识别其酷炫的注解,使用Lombok的@Getter和@Setter注解后,代码会像下面这样看起来很苗条: @Getter @Setter public class...既然其他方法都替换掉了,那把toString方法也一起拿掉吧.如你所愿,可以使用@ToString注解去掉对于的方法: @Getter @Setter @EqualsAndHashCode public...以上代码行数的变化过程,也许是无数程序员爱上Lombok的主要原因吧,这就像一个肥胖的人逐渐变成一个身材苗条的人。同时也让你看到了一个现象:你以为程序员很懒吗?其他有些时候他们比你想象中的还要懒。...于是我不得不将所有的Lombok注解从项目源代码中清除,并使用IDE自带的功能生成getter/setter,equals,hashCode,toString以及构造器等方法,你也可以使用Delombok...如果你正在参与一个团队项目(或大型项目),考虑到后续的升级与扩展,是否使用Lombok,请与你的团队多沟通和三思。

    56310

    阅读《代码整洁之道》总结

    多年的工作中,屡次被别人的代码坑的苦不堪言,回想起当年我留下的代码,肯定也坑害了后来的同僚。...当阅读JDK源码或者其他优秀开源工程时,叹服作者代码构建之精良,他们都有共同的特点:精确的变量名、恰到好处的设计模式、详细而不赘述的注释等等。...,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法 举例如下: @Setter 注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成...@Data 注解在类,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。...b)(A与B的差): {1,2,3} CollectionUtils.subtract(b, a)(B与A的差): {4,6,7} (完)

    72641
    领券