java.lang.reflect.Type:java语言中所有类型的公共父接口,一大作用是表示范型擦除后的原始数据类型表示,即当经过java编译器编译之后,代码中的范型会被“打回原形”成为Object, 而原来的类型又不能全统一到Class类中,这些类型如何表示?问题就产生了,而Type类型及相关子接口可以解决这一问题,其子接口主要如下:
arameterizedType: 表示一种参数化的类型,比如CollectionGenericArrayType: 表示一种元素类型是参数化类型或者类型变量的数组类型
TypeVariable: 是各种类型变量的公共父接口
WildcardType: 代表一种通配符类型表达式,比如?, ? extends Number, ? super Integer【wildcard是一个单词:就是“通配符”】
以下是一点示例:
class Element {}
class Box<T> {}
class Pair<KEY, VALUE> {}
public class GenericClassTest2 {
public static void main(String[] args) {
List<Element> list = new ArrayList<Element>();
Map<String,Element> map = new HashMap<String, Element>();
Box<Element> box = new Box<Element>();
Pair<Integer, String> p = new Pair<Integer, String>();
System.out.println(Arrays.toString(
list.getClass().getTypeParameters()));
System.out.println(Arrays.toString(
map.getClass().getTypeParameters()));
System.out.println(Arrays.toString(
box.getClass().getTypeParameters()));
System.out.println(Arrays.toString(
p.getClass().getTypeParameters()));
}
}
运行后,输出结果为:
[E]
[K, V]
[T]
[KEY, VALUE]
参考:
http://www.jb51.net/article/73456.htm
http://aaron7524.iteye.com/blog/406587
http://blog.csdn.net/lonelyroamer/article/details/7868820