我有多个类的实例,其中嵌入了一个枚举。这是所述类的简化版本:
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()。
我在Java反射和枚举上查看了这个StackOverflow post,但是当我尝试通过指定路径(com.package.FirstClass.EnumGroup)来获取我的枚举时,我得到了一个ClassNotFoundException。我猜想把课堂上的枚举搞砸了。
Class<?> clz = Class.forName("com.package.FirstClass.EnumGroup");
我不一定需要这个设置,但最终目标是在每个迭代enum的类中都没有相同的代码。
答案 0 :(得分:8)
由于您使用的是Class.forName
,因此您需要使用类的 name ,并且在类名中,内部类型与$
的外部类型分开。
所以使用
Class<?> clz = Class.forName("com.package.FirstClass$EnumGroup");
// ^