Java 的 enum 是 singleton class (只能有一个 instance)。Java 通过编译器和 JVM 联手来防止enum 产生超过一个class:不能利用 new、clone()、de-serialization、以及 Reflection API 来产生enum 的 instance。
所以想通过反射来创建枚举型对象则需要其他途径:
举个例子:
如果用Class.newInstance()来创建,运行时肯定会报异常。
但Java也给我们准备了Enum类,可以它直接生成enum的对象。这里主要是用了它提供的方法:Enum.valueOf(Class,value);
示例如下:
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();
}
}
}
Java 的 enum 是 singleton class (只能有一个 instance)。Java 通过编译器和 JVM 联手来防止enum 产生超过一个class:不能利用 new、clone()、de-serialization、以及 Reflection API 来产生enum 的 instance。 所以想通过反射来创建枚举型对象则需要其他途径:举个例子:public
枚举使用
enum
关键字,(枚举的实例是常量,因此按照命名规范它们都得大写,如果有多个单词用下划线将他们隔开),枚举属于一种类,它有自己的方法,枚举类型可以作为swatch语句的参数(JDK1.5以后支持的),枚举不可以产生实例
对象
(所有自定义的枚举都是继承
Enum
(一个抽象类),构造函数默认为私有的);
swatch语句的参数只能是byte、short、char、int类型以及他们的包装类和Str...
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
http://blog.csdn.net/
java
zejian/article/details/71333103
出自【zejian的博客】
关联文章:
深入理解
Java
类型信息(Class
对象
)与
反射
机制
深入理解
Java
枚举类型(
enum
)
深入理解
Java
注解类型(@Annotation)
JAVA
反射
机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个
对象
,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用
对象
方法的功能称为
java
语言的
反射
机制。
一、
反射
Java
的
反射
(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个
对象
,都能够调用它的任意方法和属性,既然能拿到那么,我们就可以修改部分类型信息;这种动态获取信息以及动态调用
对象
方法的功能称为
java
语言的
反射
(reflection)机制。
a、在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对系统应用开放,这时候就可以利用
Java
的
反射
机制通过
反射
来获取所需的私有成员或是方法 。