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

游戏开发:如何基于Inventory中已有对象创建同类型新实例?

解决Item子类实例化的无判断方案

你当前用硬编码条件判断的方式,每次新增Item子类都要修改判断逻辑,扩展性很差。下面提供两种不用写大量if的可行方案:

方案一:利用多态(推荐)

在父类Item中定义一个抽象方法,让每个子类实现自己的实例创建逻辑,直接通过父类引用调用即可:

// 父类Item
public abstract class Item {
    // 原有属性与方法
    public abstract Item createNewInstance();
}

// 子类Sword的实现
public class Sword extends Item {
    @Override
    public Item createNewInstance() {
        // 若需要复制原对象的属性,可在这里传入参数,比如return new Sword(this.damage);
        return new Sword();
    }
}

// 实际调用代码
Item newItem = npc.inventory.get(index).createNewInstance();

这种方式编译时就能检查错误,符合开闭原则——新增子类只需实现方法,无需修改原有逻辑,非常适合游戏开发的场景。

方案二:利用反射

通过对象的Class对象动态创建实例,无需手动为每个子类编写逻辑:

try {
    Item originalItem = npc.inventory.get(index);
    // 调用无参构造创建实例
    Item newItem = originalItem.getClass().getDeclaredConstructor().newInstance();
    // 若子类使用带参构造,可调整为:getDeclaredConstructor(int.class).newInstance(10);
} catch (Exception e) {
    // 处理实例化异常,比如无参构造不存在、权限问题等
    e.printStackTrace();
}

这种方式无需修改子类,但运行时可能抛出异常,性能略逊于多态方案,适合快速实现或子类构造逻辑统一的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:26:00