范型擦除中的原始类型类型接口--个人见解记录,非官方


java.lang.reflect.Type:java语言中所有类型的公共父接口,一大作用是表示范型擦除后的原始数据类型表示,即当经过java编译器编译之后,代码中的范型会被“打回原形”成为Object, 而原来的类型又不能全统一到Class类中,这些类型如何表示?问题就产生了,而Type类型及相关子接口可以解决这一问题,其子接口主要如下:

arameterizedType: 表示一种参数化的类型,比如Collection
GenericArrayType: 表示一种元素类型是参数化类型或者类型变量的数组类型
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


猜你喜欢

转载自blog.csdn.net/zxk364961978/article/details/70146183
今日推荐