2016-08-01 26 views
-2

Ich habe die folgende Klasse Type:Wie erstellt Record-Klasse in Java?

class Type{ 
    String type; 
    public Type(String type){ 
     this.type = type; 
    } 
} 

Ich habe einige Arten hier initialisiert:

Type cor = new Type("cor"); 
Type name = new Type("name") 

und Jetzt möchte ich eine Klasse Record, genannt

class Record{ 
    String name; 
    Type[] types; 
    public Record(String name, Type[] types){ 
     this.name = name; 
     this.types = types; 
    } 
} 

Nun, ich habe hier stecken geblieben. Was ich tun möchte, ist, wenn eine Instanz der Klasse zu initialisieren Record, wie folgt aus:

Record rec = new Record("Position", ...); 

sollte es so etwas wie dieses, ich werde ein Beispiel für die Positionsaufzeichnung geben hier:

Record Position = [cor x, cor y, name z]; 

Also ist Typ [] hier eine gute Wahl? Ich finde es schwierig, den Typ und den Variablennamen wie x, y; Oder sollte ich eine HashMap verwenden?

+0

Was versucht die Klasse 'Record' zu modellieren? Es scheint derzeit wie ein Container für beliebige Datentypen (und als solche nicht sehr nützlich). "Typ" ist nur ein Wrapper um eine benannte Zeichenfolge. Wofür sollte es verwendet werden? –

+0

Uhh, 'int' ist ein primitiver Typ, kein Type type – Li357

+0

Ich überlasse es nur einem Wrapper, nur um diese Frage hier klarer zu machen. Das Problem besteht darin, sowohl die Typinstanz als auch den Typnamen in der Datensatzklasse –

Antwort

0

Es ist schwierig, die Frage ohne weitere Informationen zu dem, was Sie modellieren möchten, zu beantworten. Ihr "Position" -Beispiel ist ziemlich verwirrend, da es impliziert, dass ein einzelner Datensatz mehrere "Variablen" verschiedener Typen enthält. Ich gehe jedoch davon aus, dass ein Datensatz mehrere Typen haben kann. Es ist unklar, ob sich die Typen ändern können und ob es eine feste Typengruppe gibt.

Ideal sind die Menge der Typen statisch und man konnte eine Aufzählung von Arten verwendet werden:

enum RecordType { 
    COR, NAME, ...; 
} 

class Record { 
    public Record(String name, EnumSet<RecordType> types) { 
     ... 
    } 
} 

Dann einen neuen Rekord zu schaffen aussehen würde:

Record record = new Record("My record", EnumSet.of(RecordType.NAME)); 

Wenn die Menge der Typen ‚aren Wenn Sie statisch sind, müssen Sie eine Klasse definieren. In diesem Fall würde ich Ihnen empfehlen, Set<RecordType> anstelle von RecordType[] als Konstruktorargument zu verwenden. Dies macht deutlich, dass es sich um eine Reihe von Typen (d. H. Keine Duplikate) handelt und vermeidet alle Fehlerprüfungen, die Sie mit einem Array durchführen müssen. Wenn ein einzelner Datensatz mehrere Werte für verschiedene Typen haben kann, benötigen Sie eine Map<RecordType,String> Mitgliedsvariable. In diesem Fall würde ich empfehlen, die Werte im Konstruktor nicht zu definieren. Verwenden Sie stattdessen eine addTypeValue Methode zum Hinzufügen von Werten zur Karte.