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

Java调用装饰器方法实现宝可梦buff效果不生效问题咨询

问题根因
  • 核心错误出现在generateRandomPokemon的循环调用逻辑:Java属于值传递语言,调用addRandomBuff(randP)时,方法形参p是实参randP的副本,方法内部将p赋值为装饰器实例的操作,只会修改形参的指向,完全不会影响外部的randP变量,装饰后的实例没有被保留,自然看不到任何buff效果。
  • 你当前的addRandomBuff方法实现本身符合语法和装饰器设计逻辑,之前尝试其他写法触发的编译报错,属于错误尝试方向导致的问题,不需要调整该方法的实现。
修复方案

仅需修改generateRandomPokemon中的循环代码,接收addRandomBuff的返回值并重新赋值给randP即可,不需要修改任何方法定义、参数,完全符合项目UML设计要求:

for(int x = 1; x < level; x++){
  randP = addRandomBuff(randP); 
}
生效逻辑说明

addRandomBuff返回的是被AttackUp/HpUp装饰后的新Pokemon实例,将该实例重新赋值给randP后,后续调用randP.getName()、randP.getHp()等方法时,会优先调用最外层装饰器的对应实现,即可正常显示+ATK/+HP的名称后缀,以及对应的属性加成效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:06:03