Ich mache eine Coin-Klasse mit einer statischen Arraylist, die jede Instanz der erstellten Klasse speichert, aber ich muss diese Liste mit einer ersten Instanz initiieren, und ich habe nicht herausgefunden, wie machen Sie es, ohne es zweimal hinzuzufügen (wegen eines überflüssigen Codes), irgendwelche Vorschläge?statische Arraylist mit Instanzen der Klasse mit Initialwerten
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);
}
}
* statische Arraylist, die jede Instanz speichert * nicht sicher, was Ihre – Ravi
zu tun versuchen Denkt bitte halten, dass dieses Muster von Natur aus fad unsicher ist (dh ist, man kann grundsätzlich keinen thread-sicheren Code damit machen), also ist es eine schlechte Angewohnheit, hineinzugehen. Ein besserer Ansatz wäre ein privater Konstruktor und eine statische Factory-Methode, die diesen Konstruktor aufruft und dann die Instanz zu "coins" hinzufügt. – yshavit
Besser wäre es, eine CoinFactory-Klasse zu haben, die Coin-Instanzen erstellt (und zurückgibt) und sie selbst hinzufügt. Ihre aktuelle Lösung ist nicht Thread-sicher und das ist nur ein Nachteil. – DodgyCodeException