java - 使用静态类来表示不同形式的货币

标签 java static

昨晚我在开发一个小游戏时给自己编写了一个问题。有一天,我说服自己,我应该把一些业余时间投入到一些富有成效的事情上,所以我决定开始开发基于文本的角色扮演游戏,而不是玩游戏。然后,我谈到了在游戏中代表货币的问题。现在,因为这只是为了好玩,我想挑战一下自己。而不是仅仅将货币表示为单一值(例如:称为“金币”的单一类型硬币并不是游戏中唯一的硬币类型。)

我决定创造 4 种硬币 - 便士、铜、第纳尔和奥伦。所有 4 枚硬币都有重量、体积、 Material 和名称等数值。此外,硬币有汇率,这决定了它们的相对值(value)。这样做的目的是允许对一种无聊的旧货币有不同的用途。我的问题是我不确定如何实现它。

我昨晚得到的是 4 个类(Pence、Copper、Denar、Oren)扩展了一个抽象类 Coin。 Coin 包含许多 protected 静态元素,例如所有 4 个子类的 DENSITY、VOLUME、NAME、EXCHANGE。

子类的构造函数如下所示:

public Coppers() {
    super();
    super.metal = COPPER_METAL;
    super.name = COPPER;
    super.setVolume();
    super.setDensity();
    super.setWeight();
}

父类(super class)中的方法如下所示:

protected void setDensity() {
    switch( getMetal()) {   
    case "copper":
        this.density = DENSITY_COPPER;
        break;
    case "silver":
        this.density = DENSITY_SILVER;
        break;
    case "gold":
        this.density = DENSITY_GOLD;
        break;
    default:
        this.density = DENSITY_COPPER;
        break;
    };
}

这看起来非常……错误。我不确定最佳实践是什么。我向我的 friend 询问有关使用静态类来保存这些值的问题,并得到了不同的答复。不过,这些类(class)的要点很重要。假设玩家类有一个名为 Purse 的对象,它跟踪不同类型硬币的数量。玩家可以使用钱包在银行兑换硬币、购买商品以及出售商品换取硬币。持有一组所有实例化的硬币是没有任何意义的,对吧?我只需要信息和方法。那么实现静态类有意义吗?当 4 种硬币共享如此多的属性时,我怎样才能让它们发挥最佳性能?

最佳答案

在这种情况下您可以做的是使用Enum。您枚举所需的常量,通过其构造函数为它们指定类型。

现在我们有了它们的类型,我们可以将其与您在代码中处理的字符串进行比较,如果没有任何类型匹配,我们默认将其设置为 Density.COPPER

Density density;

protected void setDensity (String metal) {
    for (Density d : Density.values()) {
        if (metal.equals(d.getType())) {
            this.density = d;
            return;
        }
    }
    this.density = Density.COPPER;
}

enum Density {
    COPPER("copper"),
    SILVER("silver"),
    GOLD("gold");

    String type;

    Density(String s) {
        type = s;
    }

    public String getType() {
        return type;
    }
}

关于java - 使用静态类来表示不同形式的货币,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37494032/

相关文章:

java - 在 android OnPreferenceClickListener 中调用非静态方法

java - 通过新加载的类对静态变量所做的更改似乎不适用。 ( java )

java - 通过 MediaRecorder 录制音频

java - 构造函数可以像java中的方法一样返回数据类型吗?

c++ - 访问一个类的成员。此类的对象从未实例化。所有成员都是静态类型

java - 声明一个最终的静态方法是个坏主意吗?

c++ - 为什么可以在没有类实例的情况下在编译时访问非常量、非静态成员?

Java拖动 Sprite 从头开始重绘

java - 多线程 : Objects being set to null while using them

java - 如何根据函数的输出在 @Query 中使用查询字符串