根据方法参数更改对象的类型

change type of Object depending on method argument

所以再次抱歉,这个问题可能 answered/asked 很多,但我不太确定我在搜索什么

我目前正在为游戏制作 mod,需要注册我创建的自定义项目。 我为每种类型的项目创建了自定义 classes,其中包含我需要访问的各种变量。问题是,他们都继承的 class(es) 没有这些 variables/data.

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

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 以接受我制作的每个自定义项目 class(超过 10 个 atm),但这并不是我真正想要的。

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

您可以将 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);

但是为 Item 创建一个 Interface 以包含每个 Item 实现并且您的方法实现的 getName 方法会更像 OO不必知道您的物品是哪种类型即可获得名称:

public void addItem(Item item) {
    registerItem(item, item.getName());
}