0

这对我来说很难用文字表达出来,所以请允许我解释一下。

我有一个抽象类Entity和子类HouseWarehouse. 每个子类都具有相同的静态变量,但具有不同的值。

当在我的游戏中按下按钮时,将Action创建一个指定创建并放置在世界中的实体子类。我想编写一个通用方法,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 等是静态的,应该由类而不是对象访问?

我真的很难表达我想要什么。也许有人可以破译这个或提供一些关于我的问题的其他见解。如果您愿意,我可以提供任何其他必要的信息。

编辑:

e是我之前基于 ID 系统初始化的任何子类的实例,但我不喜欢这种方法。

4

2 回答 2

4

静态变量在这里是错误的方法,特别是因为您已经实例化了您的实体。

相反,在父类上创建抽象函数costEnergy()costMoney()等,并在子类上实现它们(使用正确的值)。

于 2013-04-17T18:04:41.800 回答
1

静态变量在 Java 中不是多态的。一种选择是在 Entity 中声明抽象方法 getCostEnergy、getCostMoney 和 getCostResource,并让每个子类覆盖这些方法以返回不同的常量。这适用于您的场景吗?

于 2013-04-17T18:05:50.150 回答