Java类能否定义操作多个自身实例的实例方法?
不可变Size类plus方法实现说明
- 你的需求理解没有偏差,用实例方法实现两个Size对象的加法是Java生态中非常通用的常规实现方式,完全符合编码惯例。
- 实例方法不需要显式把自身作为入参:实例方法隐式持有当前对象的
this引用,可以直接访问当前实例的所有字段,只需要接收另一个同类型的Size对象作为入参即可。 - 因为Size是不可变类,plus方法绝对不能修改当前实例或者入参实例的字段值,必须将两个对象的s字段相加后,生成一个全新的Size实例返回。这种实现逻辑和JDK自带的不可变类(比如
String、BigInteger、LocalDateTime)的运算方法逻辑完全一致。
标准实现参考
// 类加final禁止继承,避免子类破坏不可变特性 public final class Size { // 字段私有final修饰,初始化后不可修改 private final int s; public Size(int s) { this.s = s; } // 仅提供getter,不提供任何修改字段的方法 public int getS() { return s; } public Size plus(Size other) { if (other == null) { throw new IllegalArgumentException("相加的Size参数不能为null"); } // 运算后返回全新实例,不改动原有对象的状态 return new Size(this.s + other.s); } }
补充说明:如果采用静态方法实现plus,才需要同时传入两个Size实例作为参数,但这种写法的语义流畅度远不如实例方法——实例方法调用
a.plus(b)完全贴合自然语言中“a加b”的表达逻辑,可读性更强,也是业务开发中优先选择的实现方式。
内容的提问来源于stack exchange,提问作者jphuong
相关产品推荐
相关产品推荐

