簡體   English   中英

獲取給定超類的子類的靜態變量

[英]Get static variable of subclass given superclass

這對我來說很難提一個問題,所以請允許我解釋一下。

我有一個抽象類Entity並且子類HouseWarehouse 每個子類具有相同的靜態變量,但具有不同的值。

在我的游戲中按下按鈕時,將創建一個Action ,該Action指定要創建哪個Entity子類並將其放置在世界中。 我想編寫一個通用方法,使用其子類的靜態變量將某些Entity放置到世界上。

我有一個PlaceEntityAction類,當條件正確時,單擊鼠標時將放置適當的實體。 如何將要放置的類傳遞給此Action,以便它可與任何通用Entity

這是一些愚蠢的代碼:

if (mousePressed)) {
    if (some conditions are true) {

        int ex = x pos
        int ey = y pos


        if (world.player.haveFunds(e.COST_ENERGY, e.COST_MONEY,
                    e.COST_RESOURCE)) {
            if (world.places[ex][ey] == 0) {
                world.entities.add(e);
                world.player.addEnergy(-e.COST_ENERGY);
            }
        }
    }
}

因此,基本上,如何使e成為傳遞給Action的子類,因為COST_MONEY等是靜態的,應該由Class而不是對象進行訪問?

我真的很難表達我想要的東西。 也許有人可以對此進行解密或提供有關我的問題的其他見解。 如果需要,我可以提供任何其他必要的信息。

編輯:

e是我先前基於ID系統初始化的任何子類的實例,但我不喜歡此方法。

在這里,靜態變量是錯誤的方法,尤其是因為您已經實例化了實體。

而是在父類上創建抽象函數costEnergy()costMoney() ,然后在子級上實現它們(使用正確的值)。

靜態變量在Java中不是多態的。 一種選擇是在Entity中聲明抽象方法getCostEnergy,getCostMoney和getCostResource,並讓每個子類重寫這些方法以返回不同的常量。 這適合您的情況嗎?

暫無
暫無

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

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