2010-08-03 4 views

Répondre

8

getEnumConstants() une méthode de l'objet de classe retourne un tableau d'objets

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); 
    } 
} 

Prints:

A
B
C
D

+2

+1; C'est la meilleure réponse! – polygenelubricants

2

Les principales suivantes:

GetEnumFields public class {

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]); 
    } 
} 

}

imprime:

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

Vous pouvez utiliser EnumSet.allOf(Class<E>), où <E extends Enum<E>>

Étant donné:

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

Vous pouvez écrire:

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

Je ne peux pas l'utiliser sans accès à l'alphabet. Dites qu'il y a Class cls = Alphabet.class et travaillez uniquement avec cls. –

+0

@Joel: contourner la vérification de type générique est difficile (je ne pense pas qu'il existe une façon de le faire si vous commencez avec un 'Class '), mais je ne suis pas sûr de ce que vous dites. Cela fonctionne définitivement, mais 'Class.getEnumConstants()' est le meilleur. – polygenelubricants

+0

Merci pour votre réponse. Je l'ai regardé, appris de lui et l'ai marqué utile. Comme vous le suggérez, j'ai accepté la réponse getEnumConstants(). La raison principale en est que cela ne nécessite rien d'autre que l'objet Class lui-même. –

Questions connexes