将班级视为常数

时间:2017-11-16 18:11:01

标签: java constants

abstract class Coin{
    String name;
    String currency;


    class EUR extends Coin{
        EUR() {
        super("EUR", "€");
        }

    }
    class USD extends Coin{
        USD() {
        super("USD", "$");
        }

    }

    private Coin (String name, String currency){
    this.name = name
    this.currency = currency}
    }

class Person{
    ///variables
    Coin coin;

    Person(//Variables, Coin coin){
        //Other assignments
        this.coin = coin
    }

}

基本上我想初始化一个通过欧元作为硬币的人,而没有创造新的欧元。 像

这样的东西
static final EUR euro = EUR

然后:

Person person = new Person(... , euro);

我不需要数百万欧元的实例,因此我不想每次都创建新的EUR

我知道我可以使用常量字符串来制作这样的东西,但我实际上想要传递一个Coin对象

我也尝试过像这样在Coin类中初始化EUR

static EUR euro = new EUR();

但IDE警告我这可能导致线程死锁

1 个答案:

答案 0 :(得分:5)

对于枚举来说,这是一个完美的工作:

public enum Coin {
    EUR("EUR", "€"),
    USD("USD", "$");

    private String name;
    private String currency;

    private Coin(String name, String currency) {
        this.name = name;
        this.currency = currency;
    }
}

一旦你定义了它,就可以使用枚举常量:

Person person = new Person(... , Coin.EUR);