2017-03-16 1 views
0

Ich entschuldige mich:die Instanzen in einer Enum Constructing ohne die Enum Klasse zu modifizieren

public enum Seeds { 
TOMATE, 
CONCOMBRE, 
SALADE, 
PATATE, 
BETTERAVE; 
} 

Anstatt eine ganze Reihe von Konstanten für den Kaufpreis, den Verkaufspreis und die Reifungszeit jedes Samens zu erstellen und sie jedes Mal neu eingeben zu müssen, wollte ich jeder Aufzählung direkt Attribute in der Klasse zuweisen:

public enum Seeds { 
TOMATE(2.00, 3.50, 5), 
CONCOMBRE(1.00, 2.50, 6), 
SALADE(1.50, 4.50, 8), 
PATATE(2.50, 3.50, 4), 
BETTERAVE(2.00, 4.00, 10); 

private final double 
       buy_price, 
       sell_price; 
private final int 
       maturation_time; 

public Seeds(double buy_price, sell_price, int maturation_time) { 
    this.buy_price = buy_price; 
    this.sell_price = sell_price; 
    this.maturation_time = maturation_time; 
}... 

und geben ihre Attribute mit Gettern zurück.

Allerdings hat mir mein Lehrer gesagt, dass ich die zur Verfügung gestellte Enum-Klasse nicht ändern kann ... also habe ich mich gefragt, ob es möglich ist, die Samen in einer anderen Klasse zu konstruieren.

Antwort

2

Wenn Sie die Samen Enum nicht ändern können, können Sie eine POJO schaffen könnten alle Informationen, die Sie wie diese müssen halten:

public class Seed { 
    private Seeds seedType; 
    private double buyPrice; 
    private double sellPrice; 
    private int maturationTime; 
    // constructor, getters and setters here 
} 

Es wäre besser, die Eigenschaften und einen Konstruktor zu den Seeds hinzufügen aber enum.

+0

I iterated auf Ihre Idee, das ist, was ich gelandet 'öffentliche Klasse Magasin { private endgültige statische Int BUY = 0, SELL = 1, RIPE = 2; Privat final static double [] [] MAGASIN = {{2,00, 3,50, 5,0}, // Tomate \t {1,00, 2,50, 6,0}, { \t 1,50, 4,50, 8,0}, { \t 2,50, 3,50, 4,0}, \t {2,00, 4,00, 10,0}, }; // getters ... } ' – CaffeinatedSynapse

+0

Ich erklärte im Grunde eine STORE-Matrix mit allen Daten darin konstant ... Ich wollte Seans Idee versuchen, aber ich habe keine Erfahrung mit Schnittstellen und konnte ihre Funktion nicht wirklich verstehen auf eigene Faust. – CaffeinatedSynapse

+0

Das funktioniert auch. Sie könnten auch Getter wie folgt hinzufügen: 'public double getBuyPrice (Seeds seedType) {return MAGASIN [seedType.ordinal()] [KAUFEN]; } ' – Joe

0

Sie können eine benutzerdefinierte Klasse erstellen, die die verschiedenen Preistypen einkapselt, und eine Map<Seed, YourCustomPricesClass> speichern, um die Beziehungen zu speichern.

Siehe auch: the Map interface im Java Tutorial

0

Ja, es ist möglich, aber Sie erodieren die Hauptabsicht hinter einer ENUM zu schaffen. Wenn Sie einen änderbaren Status einer Klasse erstellen, erstellen Sie technisch ein neues Objekt. Wenn das der Fall ist, brauchst du nicht einmal ein Enum auf den ersten Platz, bleibe bei der Klasse.

Verwandte Themen