2010-08-03 17 views

Antwort

8

getEnumConstants() ein Verfahren des Class-Objekt ein Array von Objekten

public static enum E { 
    A, B, C, D; 
} 

public static void main(String[] args) { 
    Class c = E.class; 
    for(Object b:c.getEnumConstants()) 
    { 
     System.out.println(b); 
    } 
} 

Drucke zurück:

A
B
C
D

+2

+1; Das ist die beste Antwort! – polygenelubricants

2

Folgende Haupt:

public class GetEnumFields {

public static enum Enum { 

    A, B, C, D; 
} 

public static void main(String[] args) { 

    Enum a = Enum.A; 
    Field[] declaredFields = a.getClass().getDeclaredFields(); 
    for (int i = 0; i < declaredFields.length; i++) { 
     System.out.println(declaredFields[i]); 
    } 
} 

}

druckt:

public static final GetEnumFields$Enum GetEnumFields$Enum.A 
public static final GetEnumFields$Enum GetEnumFields$Enum.B 
public static final GetEnumFields$Enum GetEnumFields$Enum.C 
public static final GetEnumFields$Enum GetEnumFields$Enum.D 
private static final GetEnumFields$Enum[] GetEnumFields$Enum.ENUM$VALUES 
4

Sie EnumSet.allOf(Class<E>) verwenden können, wo <E extends Enum<E>>

Gegeben:

public static enum Alphabet { 
    A, B, C, D; 
} 

Sie schreiben:

for (Enum<?> e : EnumSet.allOf(Alphabet.class)) { 
     System.out.println(e); 
    } 
    // A, B, C, D 
+0

ich es nicht ohne Zugriff auf Alphabet verwenden können. Sagen wir, es gibt Klasse cls = Alphabet.class und arbeite nur mit cls. –

+0

@Joel: Die generische Typprüfung zu umgehen ist knifflig (ich glaube nicht, dass es eine typsichere Methode gibt, wenn man mit einer 'Klasse ' beginnt), aber ich bin mir nicht sicher, was du sagst. Dies funktioniert definitiv, aber 'Class.getEnumConstants()' ist am besten. – polygenelubricants

+0

Danke für Ihre Antwort. Ich schaute es an, lernte daraus und markierte es als nützlich. Wie Sie vorschlagen, habe ich die Antwort getEnumConstants() akzeptiert. Der Hauptgrund dafür ist, dass es nichts anderes als das Klassenobjekt selbst benötigt. –