您的位置:首页 > 编程语言 > Java开发

java里,enum对象的反射创建

2008-01-26 20:13 465 查看
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();


}




}




}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: