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

如何为类设置默认对象参数,使参数依赖其他参数无需单独方法

解决方案:让派生参数自动保持最新值

你的核心需求是让points这个参数基于wins和draws自动计算,不需要每次手动调用方法更新。原来的代码只在构造时计算了一次初始值,后续修改wins或draws时没有同步更新points,所以始终是初始值。下面提供两种可行方案:

方案1:用Getter实时计算(推荐)

不需要把points作为成员变量存储,每次获取时直接基于当前的wins和draws计算,这样永远是最新值,完全避免状态不同步问题:

public class FootballTeams {
    private String name;
    private int gamesQuant = 0;
    private int wins = 0;
    private int draws = 0;
    private int looses = 0;

    public FootballTeams(String name) {
        this.name = name;
    }

    // 实时计算并返回points,无需单独存储
    public int getPoints() {
        return wins * 3 + draws;
    }

    // 给wins、draws提供setter,修改后getPoints会自动返回新值
    public void setWins(int wins) {
        this.wins = wins;
    }

    public void setDraws(int draws) {
        this.draws = draws;
    }

    // 其他必要的getter/setter
    public String getName() { return name; }
    public int getGamesQuant() { return gamesQuant; }
    public void setGamesQuant(int gamesQuant) { this.gamesQuant = gamesQuant; }
    public int getLooses() { return looses; }
    public void setLooses(int looses) { this.looses = looses; }
}

方案2:存储points并在依赖项变化时自动更新

如果必须把points作为成员变量存储,可以封装一个私有更新方法,在构造函数和所有修改wins、draws的地方调用它:

public class FootballTeams {
    private String name;
    private int gamesQuant = 0;
    private int wins = 0;
    private int draws = 0;
    private int looses = 0;
    private int points;

    public FootballTeams(String name) {
        this.name = name;
        updatePoints(); // 初始化时计算初始值
    }

    // 私有方法,负责更新points
    private void updatePoints() {
        points = wins * 3 + draws;
    }

    // 修改wins后立即更新points
    public void setWins(int wins) {
        this.wins = wins;
        updatePoints();
    }

    // 修改draws后立即更新points
    public void setDraws(int draws) {
        this.draws = draws;
        updatePoints();
    }

    // 比如新增胜利场次的方法,也要同步更新points
    public void addWin() {
        wins++;
        updatePoints();
    }

    public int getPoints() {
        return points;
    }

    // 其他getter/setter省略
}

原代码问题分析

你之前的setPoints方法只在构造函数里调用了一次,后续修改wins或draws时没有触发重新计算,所以points一直停留在初始的0值。上面的方案要么去掉存储直接计算,要么确保每次依赖项变化时都更新points,解决了这个问题。

内容的提问来源于stack exchange,提问作者Sergii Buchynskyi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:25:15