作成したクラスのすべてのインスタンスを格納する静的arraylistを持つCoinクラスを作成していますが、初期インスタンスでそのリストを開始する必要がありますそれは2回追加することなく(冗長コードのために)、何か提案しますか?追加あなたが初期値を持つクラスのインスタンスを持つ静的arraylist
private static ArrayList<Coin> coins =
new ArrayList<>();
static {
new Coin("Pesos chilenos", "CLP", 1f, "CLP");
}
を行うことができ... -
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);
}
}
あなたが – Ravi
をやろうとしているかわからない*すべてのインスタンスを格納*静的ArrayListのこと(このパターンは本質的にスレッド安全ではないことに注意してください。基本的にはスレッドセーフなコードを作ることはできません)、悪い習慣です。より良いアプローチは、プライベートコンストラクタと、そのコンストラクタを呼び出してインスタンスを 'coins'に追加する静的ファクトリメソッドです。 – yshavit
Coinインスタンスを作成して返すCoinFactoryクラスを用意して、それを自分自身に追加する方がよいでしょう。現在のソリューションはスレッドセーフではなく、それは単なる1つの欠点です。 – DodgyCodeException