2010-08-03 48 views
8

假設我們有一個Class對象。將其命名爲cls未知枚舉的列表值

現在cls.isEnum()回報true

多麼快樂!我可以讓我列出的價值嗎? (單糖,沒有牛奶)

回答

8

getEnumConstants()的類對象的方法返回的對象的陣列

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

打印:

A

Ç
d

+2

+1;這是最好的答案! – polygenelubricants 2010-08-03 10:28:46

2

以下主要:

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

}

打印:

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

您可以使用EnumSet.allOf(Class<E>),其中<E extends Enum<E>>

鑑於:

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

可以編寫:

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

我不能沒有訪問字母使用它。假設有Class cls = Alphabet.class,只能用cls工作。 – 2010-08-03 10:38:47

+0

@Joel:繞過泛型類型檢查是非常棘手的(我不認爲如果你以'Class '開始的話,那麼有一種類型安全的方法),但是我不確定你在說什麼。這絕對有效,但'Class.getEnumConstants()'是最好的。 – polygenelubricants 2010-08-03 10:49:11

+0

感謝您的回答。我看着它,從中吸取教訓,並將其標記爲有用。正如你所建議的,我接受了getEnumConstants()答案。它的主要原因是它不需要Class對象本身。 – 2010-08-03 12:45:46