Java自定义类中实现可链式调用的成员值修改方法
解决方案:实现链式调用的addone方法返回新对象
你的代码存在两个核心问题:
addone方法缺少返回类型,无法支持链式赋值- 当前实现是修改原对象的
obj值,而需求是返回存储值为5的新num对象
以下是符合需求的代码实现:
public static class num { int obj; public num(int input) { this.obj = input; } // 修正addone方法:返回新的num对象 public num addone() { // 基于当前对象的obj值+1,创建并返回新对象 return new num(this.obj + 1); } // 可选:重写toString方法,方便直接打印对象值 @Override public String toString() { return String.valueOf(obj); } } public static void main(String[] args) { num testcase = new num(4).addone(); System.out.println(testcase); // 输出5 // 还支持多层链式调用,比如: num anotherCase = new num(4).addone().addone(); System.out.println(anotherCase); // 输出6 }
关键说明:
- 链式调用的本质:要实现
对象.方法().方法()的链式调用,方法必须返回当前类的实例(这里是返回新的num对象),这样后续才能继续调用类中的方法,或者直接赋值给变量。 - 不可变对象设计:这个实现把
num做成了不可变类——所有修改操作都返回新对象,原对象的状态不会被改变。这种设计在多线程场景下更安全,也完全符合你要“新对象”的需求。 - 你尝试的
newInstance是Java反射API,完全没必要用在这里,直接通过构造方法创建新对象更简单高效。
拓展:如果要修改原对象并支持链式调用
如果你的需求是修改原对象的同时支持链式调用(而非返回新对象),可以这样写,但这不符合你当前的需求,仅作参考:
public num addone() { this.obj += 1; return this; }
内容的提问来源于stack exchange,提问作者Name_User378
相关产品推荐
相关产品推荐

