根据方法参数更改对象的类型
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());
}
所以再次抱歉,这个问题可能 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());
}