You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java自定义类中实现可链式调用的成员值修改方法

解决方案:实现链式调用的addone方法返回新对象

你的代码存在两个核心问题:

  1. addone方法缺少返回类型,无法支持链式赋值
  2. 当前实现是修改原对象的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:20:22