Java 当枚举在 class 中时的枚举反射
Java enum reflection when enum is inside a class
我有多个 classes 实例,其中嵌套了一个枚举。这是 class:
的简化版本
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
}
我的目标是以编程方式迭代这些 classes(即 FirstClass、SecondClass 等)并提取枚举(通常称为 "EnumGroup")并调用方法 getName() on枚举的每个值。
我在 Java 反射和枚举上查看了这个 Whosebug post,但是当我尝试通过指定路径 (com.package.FirstClass.EnumGroup) 获取我的枚举时,我得到了 ClassNotFoundException。我猜把枚举放在 class 里面是搞砸了。
Class<?> clz = Class.forName("com.package.FirstClass.EnumGroup");
我不一定需要这个设置,但最终目标是在遍历枚举的每个 class 中都没有相同的代码。
由于您正在使用 Class.forName
,您需要使用 class 的 name,并且在 class 名称中,内部类型与外部类型分开类型 $
.
所以使用
Class<?> clz = Class.forName("com.package.FirstClass$EnumGroup");
// ^
我有多个 classes 实例,其中嵌套了一个枚举。这是 class:
的简化版本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
}
我的目标是以编程方式迭代这些 classes(即 FirstClass、SecondClass 等)并提取枚举(通常称为 "EnumGroup")并调用方法 getName() on枚举的每个值。
我在 Java 反射和枚举上查看了这个 Whosebug post,但是当我尝试通过指定路径 (com.package.FirstClass.EnumGroup) 获取我的枚举时,我得到了 ClassNotFoundException。我猜把枚举放在 class 里面是搞砸了。
Class<?> clz = Class.forName("com.package.FirstClass.EnumGroup");
我不一定需要这个设置,但最终目标是在遍历枚举的每个 class 中都没有相同的代码。
由于您正在使用 Class.forName
,您需要使用 class 的 name,并且在 class 名称中,内部类型与外部类型分开类型 $
.
所以使用
Class<?> clz = Class.forName("com.package.FirstClass$EnumGroup");
// ^