我正在制作一款视频游戏,我遇到了这个问题:

我有一个存储对象"Item"的ArrayList"Inventory".npc.inventory.get(index)此行返回NPC list 中的对象.我想创建类的新对象,该对象在这行中.我怎么能做到这一点?这有可能吗?

目前,在每个类中,我将类的名称放在变量"name"中,并 for each 类设置if,如下所示:

if (npc.inventory.get(index).name.equals("sword")) 
    Item newItem = new Sword();`

我可以在不 for each 可能的类创建If的情况下修复我的问题吗?

推荐答案

您可以通过获取对象的类并调用默认构造函数来完成此操作.但是,结果必须是泛型对象,因为您不知道类的类型.对于稍后的类型保存编程来说,这可能是一个问题:

try {
    Class<?> newItemClass = npc.inventory.get(index).getClass();
    Object newItem = newItemClass.getDeclaredConstructor().newInstance();
} catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) {
    // Handle any exceptions
}

Java相关问答推荐

如何计算内循环的时间复杂度?

了解Android Studio中的调试器输出

使用动态ID从json获取详细信息的Jolt规范

如何使用AWS CLI从S3存储桶中的所有对象中删除用户定义的元数据?

为什么Java Annotation接口覆盖对象类中的方法

使用Jolt将字段转换为列表

S,要对Java复制构造函数深度克隆所有属性进行单元测试,最可靠的方法是什么?

带有Health Check的Spring Boot BuildPack打破了本机映像构建过程

如何在代码中将行呈现在矩形前面?

使用Class.this.field=Value初始化构造函数中的最后一个字段会产生错误,而使用this.field=Value则不会

Java Telnet客户端重复的IAC符号

在处理2个映射表时,没有更多的数据可从套接字读取

Java.lang.invke.LambdaConversionException:实例方法InvokeVirtual的参数数量不正确

从映射列表中检索所有键

Java在操作多个属性和锁定锁对象时使用同步和易失性

带有可选部分的Java DateTimeForMatter

如何处理两个几乎相同的XSD文件?

未调用OnBackPressedCallback-Activitiy立即终止

如何设计包含已知和未知键值对映射的Java类?

Vaadin Flow:设置密码显示按钮属性