Domanda

Esiste un modo per scrivere un'enumerazione che può essere estesa. Ho diversi metodi che vorrei avere sempre disponibili per le mie enumerazioni. Ad esempio, utilizzo un'enumerazione per i campi del mio database. Includo il nome del campo effettivo nel database.

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

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

            public String getFieldName()
                {
                    return FieldName;
                }
        } 
È stato utile?

Soluzione

Se ho capito bene, cosa ti piacerebbe fare è qualcosa del genere:

public abstract class DatabaseField {
    private String fieldName;

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

    public String getFieldName() {
        return fieldName;
    }
}

Quindi definisci il tuo enum per estendere questa classe. Tuttavia, sfortunatamente un enum non può estendere una classe, ma può implementare un'interfaccia, quindi il meglio che puoi fare al momento è definire un'interfaccia che includa il metodo getFieldName () e che tutti i tuoi enum implementino questa interfaccia.

Tuttavia, ciò significa che dovrai duplicare l'implementazione di questo metodo (e di tutti gli altri) in tutti i tuoi enumeratori. Ci sono alcuni suggerimenti in questa domanda sui modi per ridurre al minimo questa duplicazione.

Altri suggerimenti

Tutti gli enum estendono implicitamente java.lang.Enum . Poiché Java non supporta l'ereditarietà multipla, un enum non può estendere nient'altro.

Gli Enum possono implementare interfacce ma non estendersi poiché quando compilati si traducono in java.lang.Enum.

Le enumerazioni astratte sono potenzialmente molto utili (e attualmente non consentite). Ma esiste una proposta e un prototipo se desideri fare pressione su qualcuno in Sun per aggiungerlo:

http://freddy33.blogspot.com/ 2007/11 / astratto-enum-ricky-Carlson-way.html

Sun RFE:

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

Per un ritorno ai 5 giorni pre-Java, dai un'occhiata a Articolo 21, capitolo 5, Java efficace di Josh Bloch . Parla di estendere "enums" aggiungendo valori, ma forse potresti usare alcune delle tecniche per aggiungere un nuovo metodo?

Realizza a mano l'enum con un meccanismo simile a quello definito in Effective Java di Josh Bloch.

Aggiungo che se è necessario " estendere " l'enum, quindi forse un enum non è il costrutto che stai cercando. Sono pensati per essere costanti statiche IMHO.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top