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

如何在WeaponCarrier子类中更新Weapon类的setHolder/getHolder返回值

问题根因

  • 你现有代码的逻辑是将weapon本身持有的原有holder值重新设置进去,没有传入新值,相当于没有做任何修改,自然调用getHolder无法获取到你期望的新值
  • 按照Java封装规范,Weapon类中的holder成员变量一般为private私有属性,外部类无法直接通过weapon.holder的方式访问,会直接触发编译错误,也是代码无法运行的核心原因

修复方案

你需要将需要设置的新holder实例作为参数传入setHolder方法即可,如果需要将当前Sword子类实例作为weapon的持有者,直接传入this即可,参考实现如下:

// Java类名遵循大驼峰命名规范,调整类名为Sword
class Sword extends WeaponCarrier {
    void setWeaponHolder() {
        // 传入当前Sword实例作为weapon的新持有者,也可以传入其他自定义的WeaponCarrier实例
        weapon.setHolder(this);
    }

    // 代理weapon的getHolder方法,可直接通过Sword实例调用getHolder获取结果
    WeaponCarrier getHolder() {
        return weapon.getHolder();
    }
}

额外注意事项

  • 确保基类WeaponCarrier中的weapon实例已经完成初始化,避免空指针异常
  • 如果需要自定义setHolder的业务逻辑,可以在调用weapon的setHolder前增加自定义校验,示例如下:
void setWeaponHolder(WeaponCarrier newHolder) {
    // 自定义校验逻辑:仅当新持有者非空时才执行设置
    if (newHolder != null) {
        weapon.setHolder(newHolder);
    }
}

内容的提问来源于stack exchange,提问作者Δημητρης Μπαμπας

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:24:08