如何在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,提问作者Δημητρης Μπαμπας
相关产品推荐
相关产品推荐

