У меня есть несколько экземпляров классов, внутри которых вложено одно перечисление. Вот упрощенная версия указанного класса:
public class FirstClass extends BaseClass {
public enum EnumGroup {
ONE("one"),
TWO("two");
private String mName;
EnumGroup(String name) {
this.mName = name;
}
public String getName() {
return mName;
}
}
// FirstClass methods
}
Моя цель состоит в том, чтобы программно перебрать эти классы (например, FirstClass, SecondClass и т. д.), вытащить перечисление (всегда называемое «EnumGroup») и вызвать метод getName() для каждого значения перечисления.
Я просмотрел это сообщение StackOverflow. в отражении и перечислениях Java, но когда я пытаюсь получить свое перечисление, указав путь (com.package.FirstClass.EnumGroup), я получаю исключение ClassNotFoundException. Я предполагаю, что размещение перечисления внутри класса что-то испортило.
Class<?> clz = Class.forName("com.package.FirstClass.EnumGroup");
Мне не обязательно нужна эта настройка, но конечная цель состоит в том, чтобы не иметь один и тот же код в каждом классе, который выполняет итерацию по перечислению.
Class.forName()
? Почему бы просто не использовать литерал классаcom.package.FirstClass.EnumGroup.class
? У вас не будет исключения, компилятор проверит, что вы используете допустимое имя класса, и рефакторинг автоматически сделает ваш код правильным. - person JB Nizet   schedule 19.10.2015