Java 的 enum 是 singleton class (只能有一个 instance)。Java 通过编译器和 JVM 联手来防止enum 产生超过一个class:不能利用 new、clone()、de-serialization、以及 Reflection API 来产生enum 的 instance。
所以想通过反射来创建枚举型对象则需要其他途径:
举个例子:
public
enum
Color
...
{
red,blue,green,black,white;
}
如果用Class.newInstance()来创建,运行时肯定会报异常。
但Java也给我们准备了Enum类,可以它直接生成enum的对象。这里主要是用了它提供的方法:Enum.valueOf(Class,value);
示例如下:
public
enum
Color
...
{
red,blue,green,black,white;
}


public
class
RefColor
...
{
public Color color;
}


public
class
TestEnum
...
{


public static void main(String[] args) ...{

try ...{
RefColor obj=new RefColor();
Class clazz=Class.forName("Color");
Field field=obj.getClass().getDeclaredField("color");
field.set(obj, Enum.valueOf(clazz, "red"));
System.out.println(obj.color);

} catch (Exception e) ...{
e.printStackTrace();
}
}

}