2010-08-03 3 views

ответ

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

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

я не могу использовать его без доступа к алфавиту. Скажем, есть класс cls = Alphabet.class и работает только с cls. –

+0

@Joel: обход общей проверки типов сложный (я не думаю, что существует типичный способ сделать это, если вы начинаете с класса «»), но я не уверен, что вы говорите. Это определенно работает, но 'Class.getEnumConstants()' лучше. – polygenelubricants

+0

Спасибо за ваш ответ. Я посмотрел на него, узнал от него и отметил его полезным. Как вы полагаете, я принял ответ getEnumConstants(). Основная причина этого в том, что он не требует ничего другого, кроме самого объекта класса. –

Смежные вопросы