Java stellt Enums als Klassen dar. So ist es möglich, Methoden zu schreiben, die nicht nur ein bestimmtes Enum als Argument verwenden, sondern ein beliebiges.
Enums erweitern die Klasse java.lang.Enum<E extends Enum<E>>
. Eine Methode
public void foo(java.lang.Enum> someEnum) { ... }
kann somit nur mit einer Enum-Konstanten aufgerufen werden.
foo(SomeEnum.SOME_ENUM_CONSTANT);
Der genaue Enum-Typ ist dabei unerheblich.
Dies dürfte nur in den wenigsten Fällen irgendeinen Zweck erfüllen. Interessanter ist dann schon die Tatsache, daß man einen Enum-Typ übergeben kann:
public static > void bar(final Class someEnumType) { ... }
bar(SomeEnum.class);
Auf diese Weise können bspw. alle Konstanten ausgelesen werden.
public static &> void bar(final Class someEnumType) {
for(E constant : someEnumType.getEnumConstants())
System.out.println(constant);
}