Allgemein

Format (in dieser Reihenfolge):

  • enum const list
  • enum body

Sonstiges

  • It is a compile-time error if the same keyword appears more than once as a modifier for an enum declaration.
  • It is a compile-time error if a constructor declaration in an enum declaration is public or protected (default und private ok)
  • It is a compile-time error if a constructor declaration in an enum declaration contains a superclass constructor invocation statement
    (also kein super() Aufruf im Konstruktor möglich, aber this(…))
  • It is a compile-time error to attempt to explicitly instantiate an enum type
    (Konstruktor kann nicht explizit aufgerufen werden (nie new MyEnum() möglich))
  • Kann in switch-case verwendet werden
  • Implementiert Comparable, das auf Enum.ordinal geht

Beispiele

Enum mit Class-Body (https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.9)

enum Operation {
    PLUS {
        double eval(double x, double y) { return x + y; }
    },
    MINUS {
        double eval(double x, double y) { return x - y; }
    },
    // Each constant supports an arithmetic operation
    abstract double eval(double x, double y);
}

Operation.PLUS.getClass().isEnum liefert false zurück, da Enum mit Class-Body als innere Klasse realisiert wird. Stattdessen kann man x instanceof Enum<?> verwenden.

Referenzen