Frage

Gibt es eine Möglichkeit, um eine Aufzählung zu schreiben, die verlängert werden können. Ich habe mehrere Methoden, die Ich mag würde immer für meine Aufzählungen zur Verfügung haben. Zum Beispiel verwende ich eine Aufzählung für meine Datenbankfelder. Ich schließe die tatsächlichen Feldnamen in der Datenbank.

public enum ORDERFIELDS
        {
            OrderID("Order_ID");
            private String FieldName;

            private ORDERFIELDS(String fname)
                {
                    this.FieldName = fname;
                }

            public String getFieldName()
                {
                    return FieldName;
                }
        } 
War es hilfreich?

Lösung

Wenn ich richtig verstehe, was Sie möchten, dass tun, so etwas wie folgt aus:

public abstract class DatabaseField {
    private String fieldName;

    private DatabaseField(String fieldName) {
        this.fieldName = fieldName;
    }

    public String getFieldName() {
        return fieldName;
    }
}

Dann definieren Sie Ihre Enum diese Klasse zu erweitern. Doch leider eine Enumeration kann eine Klasse nicht verlängern, aber es kann eine Schnittstelle implementieren, so dass das Beste, was Sie im Moment tun können, ist eine Schnittstelle zu definieren, die den GetFieldName () -Methode und hat alle Ihre Aufzählungen diese Schnittstelle implementieren.

Dies bedeutet jedoch, dass Sie die Durchführung dieses Verfahrens duplizieren (und alle anderen) in allen Aufzählungen. Es gibt einige Vorschläge in über Möglichkeiten, diese Doppelarbeit zu minimieren.

Andere Tipps

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

Aufzählungen können Schnittstellen implementieren, aber nicht da verlängern, wenn kompiliert sie zu einer java.lang.Enum übersetzen.

Abstrakte Aufzählungen sind potentiell sehr nützlich (und zur Zeit nicht erlaubt). Aber ein Vorschlag und Prototyp liegt vor, wenn Sie möchten, dass jemand es in Sun Lobby hinzuzufügen:

http://freddy33.blogspot.com/ 2007/11 / abstract-enum-ricky-carlson-way.html

Sun RFE:

http://bugs.sun.com/bugdatabase/view_bug.do? bug_id = 6570766

Für eine Reminiszenz an die Pre-Java 5 Tage, werfen Sie einen Blick auf Artikel 21, Kapitel 5, Effective Java von Josh Bloch . Er spricht über „Aufzählungen“ durch Hinzufügen von Werten erstrecken, aber vielleicht könnten Sie einige der Techniken verwenden, um eine neue Methode hinzufügen?

das Handwerk der ENUM in einem Mechanismus ähnlich wie definiert in Josh Blochs Effective Java.

Ich möchte hinzufügen, dass, wenn Sie brauchen, um „erweitern“, um die Enum, dann vielleicht eine Enumeration nicht das Konstrukt Sie nach. Sie sollen statische Konstanten IMHO sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top