0

所以再一次,抱歉这个问题可能已经被回答/问了很多,但我不确定我在寻找什么

我目前正在为游戏制作模组,需要注册我创建的自定义项目。我为每种类型的项目创建了自定义类,其中包含我需要访问的各种变量。问题是,它们都继承的类没有这些变量/数据。

我最初的尝试是这样的(伪代码)

public void addItem(Item itemc)
{
   Object item = null;
     if (itemc.getClass().equals(ItemTool))
          item = (ItemTool) itemc;
      if (itemc.getClass().equals(ItemFood))
          item = (ItemFood) itemc;
        .......etc..........

    registerItem(item,item.name);
    registerItemRenderer(item,item.meta,item.model);
}

但这不起作用,我收到一条错误消息,说项目(被视为初始化的对象)没有这些成员。

现在我只是重载了方法 addItem 以接受我制作的每个自定义项目类(超过 10 个 atm),但这并不是我真正想要的。

有没有办法将 Object 的类型更改为我将作为参数传递的任何类,然后使用它?

4

1 回答 1

0

您可以将提取item.name移至if

Object item = null;
Object itemName = null;

if (itemc.getClass().equals(ItemTool)) {
    item = (ItemTool) itemc;
    itemName = item.name;
} else {
    if (itemc.getClass().equals(ItemFood)) {
        item = (ItemFood) itemc;
        itemName = item.name;
    }
}

registerItem(item, itemName);

Interface但是创建一个forItem来包含一个-method会更像 OO getName,每个Item实现和您的方法不必知道您的项目是哪种类型来获取名称:

public void addItem(Item item) {
    registerItem(item, item.getName());
}
于 2016-04-09T20:58:54.473 回答