簡體   English   中英

根據方法參數更改對象的類型

[英]change type of Object depending on method argument

因此,再次抱歉,這個詢問者已經准備好了很多,但我不確定我要尋找的是什么

我目前正在為游戲制作模組,需要注冊我創建的自定義物品。 我為每種類型的項目創建了自定義類,其中包含需要訪問的各種變量。 問題是,它們都從中繼承的類沒有這些變量/數據。

我最初的嘗試是這樣的(偽代碼“ ish”)

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的類型更改為我將作為參數傳遞然后使用的任何類?

您可以將item.name的提取內容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創建一個包含getName方法的Item Interface更像面向對象,每個Item實現一個getName方法,並且您的方法不必知道您的項目將使用哪種類型來獲取名稱:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM