1. 相关概念:
|
|
|
2. 反射机制的常见用途:
- 动态加载类、动态获取类的信息(属性、方法、构造器)
- 动态构造对象
- 动态谓用类和对象的任意方法、构造器
- 动态调用和处理属性
- 获取泛型信息
- 处理注解
3. 为了了解JAVA的反射机制,我们首先要了解一下Type接口:
Type是Java编程语言中所有类型的通用超级接口。
包括:
- raw types(原始类型,包括类,枚举,接口,注解,数组(但不包括泛型数组)),
- parameterized types(参数化类型,如Set<String>,Map<String,String>,Class<?>),
- array types(泛型数组和参数类型数组,如T[],List<String>[]),
- type variables(类型变量,如T,K,V) and
- primitive types(基本类型,如boolean,char,byte,short,int,long,float,double)
原始类型
基本类型 |
Class类实现,一般意义上的java类 Class是Type的一个实现类,属于原始类型,是Java反射的基础,对Java类的抽象; 在程序运行期间,每一个类都对应一个Class对象,这个对象包含了类的修饰符、方法,属性、构造等信息,所以我们可以对这个Class对象进行相应的操作,这就是Java的反射;
int,float等java基本类型,其实也是Class |
参数化类型 |
ParameterizedType<interface>的实现类 参数化类型,即泛型;例如:List<T>、Map<K,V>等带有参数化的对象 |
数组类型 |
GenericArrayType<interface>的实现类 泛型数组类型,用来描述ParameterizedType、TypeVariable类型的数组;即List<T>[] 、T[]等; |
类型变量 |
TypeVariable<interface>的实现类 类型变量,即泛型中的变量;例如:T、K、V等变量,可以表示任何类;在这需要强调的是,TypeVariable代表着泛型中的变量,而ParameterizedType则代表整个泛型; |
通配符 |
WildcardType<interface>的实现类 泛型表达式(或者通配符表达式),即? extend Number、? super Integer这样的表达式;WildcardType虽然是Type的子接口,但却不是Java类型中的一种; |
其中关于Class类:
java.lang
Class Class<T>
参数类型
T - 由此类对象建模的类的类型。 例如,String.class的类型是Class<String> 。
如果正在建模的类是未知的,请使用Class<?> 。
1 2 3 |
public final class Class<T> extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElement |
Class类的类表示正在运行的Java应用程序中的类和接口。
可以表示为Class对象的各种类型:
枚举(enum) |
是一种类 |
注释(annotation) |
是一种接口 |
数组(array) |
属于一个反映为类对象的类,该对象由具有相同元素类型和维数的所有数组共享。 |
原始Java类型 (primitive type) |
(boolean,byte,char,short,int,long,float,double) 可以看成类对象 |
关键字void |
表示为类对象。 |
类(class) |
类 |