带有初始值的Class实例的静态arraylist

Nic*_*roz 1 java arraylist static-initialization java-8

我使用静态arraylist创建了一个Coin类,它存储了所创建的类的每个实例,但我需要用初始实例启动该列表,而且我没有想到如何在不添加它的情况下执行它(因为冗余代码) ), 有什么建议?

public class Coin {
    private static ArrayList<String> coinNames = new ArrayList<>();
    private static ArrayList<String> coinAbbreviations = new ArrayList<>(Arrays.asList("CLP"));
    private static ArrayList<Coin> coins =
            new ArrayList<>(Arrays.asList(new Coin("Pesos chilenos", "CLP", 1f, "CLP")));
    private static HashMap<String,Float> exchangeRates;
    private String coinName;
    private String coinAbbreviation;
    private Float coinValue;
    private String unit;


    public Coin(String coinName, String coinAbbreviation, Float coinValue, String unit) {
        assert !coinAbbreviations.contains(coinAbbreviation) : "Coin abbreviation already used";
        assert coinAbbreviations.contains(unit) : "Coin unit non existent.";
        assert !coinNames.contains(coinName) : "Coin name already used.";
        this.coinName = coinName;
        this.coinAbbreviation = coinAbbreviation;
        this.coinValue = coinValue;
        this.unit = unit;

        coins.add(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

Lou*_*man 5

如果你坚持要有可变的静态变量 - 那么做这样的事情通常不是一个好主意 - 你可以做

private static ArrayList<Coin> coins =
        new ArrayList<>();

static {
  new Coin("Pesos chilenos", "CLP", 1f, "CLP");
}
Run Code Online (Sandbox Code Playgroud)

...将元素立即添加到列表中.

  • 有一个实际的课程,存储你所有的硬币.不要将它绑定到构造函数,明确列出它们. (3认同)
  • 是.让构造函数自动存储东西是危险和令人担忧的. (2认同)