2015-10-19 175 views
1

我有多个嵌套在其中的单个枚举的类的多个实例。这里是说类的一个简化版本:当枚举在一个类中时Java枚举反射

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,二等等)和拉枚举(总称为“EnumGroup”),并调用该方法getName()枚举的每个值。我已经在Java反射和枚举上看过这个StackOverflow post,但是当我尝试通过指定路径(com.package.FirstClass.EnumGroup)来获取我的枚举时,我得到一个ClassNotFoundException异常。我猜测把enum放到课堂上是在搞点什么。

Class<?> clz = Class.forName("com.package.FirstClass.EnumGroup"); 

我不一定需要这样的设置,但最终目标在遍历枚举的每个类中都没有相同的代码。

+0

发布您的代码。 –

+0

嗨@JBNizet - 添加了抛出ClassNotFoundException的行。 – Mark

+0

为什么使用'Class.forName()'?为什么不简单使用类文字'com.package.FirstClass.EnumGroup.class'?你不会有异常,编译器会检查你是否使用了有效的类名,重构会自动使你的代码正确。 –

回答

7

由于您使用Class.forName你需要使用名称类的,在类名内类型从外类型的$分离。

所以使用

Class<?> clz = Class.forName("com.package.FirstClass$EnumGroup"); 
//            ^
+0

令人惊讶的是快速和正确的答案。谢谢@Pshemo! :) – Mark