Come definire costanti statiche in Java enum?

C’è un modo per definire statico finale variabili (che sono praticamente costanti) in Java dichiarazione enum?

Quello che voglio è quello di definire in un unico luogo, il valore letterale di stringa per il BAR(1…n) valori:

@RequiredArgsConstructor
public enum MyEnum {
    BAR1(BAR_VALUE),
    FOO("Foo"),
    BAR2(BAR_VALUE),
    ...,
    BARn(BAR_VALUE);

    private static final String BAR_VALUE = "Bar";

    @Getter
    private final String value;
}

Ho ottenuto il seguente messaggio di errore il codice di cui sopra: Non può fare riferimento a un campo prima di esso è definito.

  • perché ci sono così tanti enum con lo stesso valore? questo sembra totalmente contro l’idioma di enumerazioni!
  • Testo dell’errore è la risposta per il tuo problema !!
  • si noti che ogni enum istanza ha un proprio nome univoco in modo che io non la considero una violazione contro gli idiomi di enumerazioni. Nel mio caso, le istanze di MyEnum agisce come chiavi di una mappa i tasti che voglio anche l’output di destinazione esterno. Questi valori di uscita sembra essere stesso, in alcuni casi, secondo le specifiche tecniche.
  • No, la risposta non c’è. Ho provato a mettere la dichiarazione di costante in primo luogo, e io ho un altro errore di compilazione.
InformationsquelleAutor jilt3d | 2014-05-12



2 Replies
  1. 62

    Come IntelliJ IDEA suggeriscono che durante l’estrazione costante rendere statico classe interna. Questo approccio funziona:

    @RequiredArgsConstructor
    public enum MyEnum {
        BAR1(Constants.BAR_VALUE),
        FOO("Foo"),
        BAR2(Constants.BAR_VALUE),
        ...,
        BARn(Constants.BAR_VALUE);
    
    
    
        @Getter
        private final String value;
    
        private static class Constants {
            public static final String BAR_VALUE = "BAR";
        }
    }
    • Penso che dovrebbe essere notato che l’ @RequiredArgsConstructor è da lombok biblioteca.
    • Anche se questo non lavora per l’utilizzo del ‘costanti’ in annotazioni valori.
    • Questo non lavoro per l’utilizzo di costanti annotazione valori se si fanno le Constants classe non private.
    • questo non funziona per me..
  2. -3

    Forse si dovrebbe considerare rompere questo enum in due campi: un enum e un int:

    @RequiredArgsConstructor
    public enum MyEnum {
        BAR("Bar"),
        FOO("Foo")
    
        @Getter
        private final String value;
    }

    E quindi utilizzare:

    private MyEnum type;
    private int value;

    (Si può mettere che in una classe o no, se ha senso per voi)

Lascia un commento