Die Java-enum erweitert workaround
Gibt es eine bessere "workaround" als dieses? Ich möchte vermeiden, die Verwendung eines PRÄFIX (local var) beim Zugriff auf die Methoden, die auf TableMap.
public class TableMap extends TreeMap<String, String> {
public String field1, field2, field3;
public TableMap(Tables table){}
public void method(){}
public void method2(){}
public void method3(){}
...
}
workaround!
public enum Tables {
table1, table2, table3;
public final TableMap MAP=new TableMap(this);
private Tables(){}
}
benötigt!
public enum Tables extends TableMap {
table1, table2, table3;
public Tables(){
super(table);
}
}
Beispiel in dem gesamten code:
//workaround!
Tables.table1.MAP.method();
Tables.table2.MAP.method();
Tables.table3.MAP.method();
...
//needed!
Tables.table1.method();
Tables.table2.method();
Tables.table3.method();
...
- Die Frage (während zu sein scheint, ein wertvolles, gut), ist ein wenig unklar, fügen Sie bitte mehr Kontext.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Denke ich, können Sie versuchen, zu viel Intelligenz in die
enum
.Ich gefunden habe, ist dieser Ansatz sehr nützlich. Es vermeidet viele der Probleme, die sich aus der Tatsache, dass Sie können nicht erweitern
enum
s (naja, eigentlich können Sie aber nicht sehr nützlich).Im wesentlichen machen die
enum
eine sub-Klasse, und übergeben seine Eigenschaften bis zu Ihrem super-Klasse wie einEnumSet
. Auf diese Weise erhalten Sie weiterhin alle Vorteileenums
einschließlich der Art der Sicherheit.Wahrscheinlich könnte man sogar über eine
EnumMap
statt IhreTreeMap
für eine bessere Effizienz.Foo
pro enum-Eintrag.MappedEnum<Foo.Tables> tables = ...
und danntables.method(Foo.table1)
. Es stellt sich die call-Mechanismus inside-out-aber Sie haben jetzt eine viel klarere Struktur. PS - HinzugefügtE
parametermethod
.method()
anstatt sich auf die Vererbung. Oder Sie verwenden eineEnumMap
zum speichern eines hf pro enum-Wert.MappedEnum
verwendet dann eineMap
wie Sie es beschreiben, aber nur die Karte der Klassifikationen. Mit einemcase
mitenums
ist ein code, der Geruch meiner Meinung nach.In Java
enum
Arten erstrecken mussjava.lang.Enum
. Da Java-Typen können alle erweitern nur eine einzige Art, könnte man denken, dasspublic class TableMap extends Enum
funktionieren könnte, aber Nein, der compiler wird nicht zulassen, dass diese.In meinen eigenen code verwende ich
enum
s oft als bloßes Tasten, weil Sie so feindselig. Ich habe Sie implementieren ein gemeinsames interface, und dann verwenden Sie ein Werk zum nachschlagen bestimmter Implementierungen der "Arbeiter" - Instanzen, die ich dann nutzen kann.Einen Weg, um näher an die syntax, die Sie wollen, ist, verwenden Sie die delegate-Muster:
Map
Schnittstelle hat einevalues()
Methode, die Signatur unterscheidet sich von Enumerationen, so können Sie nicht haben eine enum implementieren, Anzeigen