Erweiterbare Java-Enumeration

7

Gibt es eine Möglichkeit, eine Aufzählung zu schreiben, die erweitert werden kann? Ich habe mehrere Methoden, die ich immer für meine Aufzählungen verfügbar haben möchte. Zum Beispiel verwende ich eine Aufzählung für meine Datenbankfelder. Ich füge den tatsächlichen Feldnamen in die Datenbank ein.

%Vor%     
Milhous 21.10.2008, 13:32
quelle

6 Antworten

10

Wenn ich richtig verstehe, was Sie tun möchten, ist etwas wie folgt:

%Vor%

Definieren Sie dann Ihre Enum, um diese Klasse zu erweitern. Leider kann ein enum eine Klasse nicht erweitern, aber es kann eine Schnittstelle implementieren, also das Beste, was Sie im Moment tun können, definieren Sie eine Schnittstelle, die die Methode getFieldName () enthält und alle Ihre Enums implementieren diese Schnittstelle.

Dies bedeutet jedoch, dass Sie die Implementierung dieser Methode (und anderer) in allen Ihren enums duplizieren müssen. Es gibt einige Vorschläge in diese Frage zu Möglichkeiten, diese Duplizierung zu minimieren.

    
Dónal 21.10.2008, 13:38
quelle
16

Alle enums erweitern implizit java.lang.Enum . Da Java keine Mehrfachvererbung unterstützt, kann eine Enumeration nichts anderes erweitern.

    
Guido García 21.10.2008 13:35
quelle
6

Enums können Schnittstellen implementieren, aber nicht erweitern, da sie bei der Kompilierung in java.lang.Enum übersetzt werden.

    
Guðmundur Bjarni 21.10.2008 13:40
quelle
6

Abstrakte enums sind möglicherweise sehr nützlich (und derzeit nicht erlaubt). Es gibt jedoch einen Vorschlag und einen Prototyp, wenn Sie jemanden in Sun Lobbying betreiben möchten, um ihn hinzuzufügen:

Ссылка

Sun RFE:

Ссылка

    
Alex Miller 21.10.2008 19:59
quelle
0

Für einen Rückblick auf die 5 Tage vor Java schauen Sie sich Punkt 21, Kapitel 5, Effektives Java von Josh Bloch . Er spricht davon, "Enums" durch Hinzufügen von Werten zu erweitern, aber vielleicht könnten Sie einige der Techniken verwenden, um eine neue Methode hinzuzufügen?

    
21.10.2008 14:22
quelle
0

Erstelle das Enum in einem Mechanismus, der dem in Josh Blochs Effektivem Java definierten ähnelt.

Ich würde hinzufügen, dass, wenn Sie das enum "erweitern" müssen, dann ist vielleicht ein enum nicht das Konstrukt, nach dem Sie suchen. Sie sollen statische Konstanten IMHO sein.

    
Aidos 22.10.2008 03:33
quelle