关于反射的补充

反射允许你在运行时分析任意的对象。如果对象是泛型类的实例,关于泛型类型参数则得不到太多的信息,因为他们会被檫除。
一、泛型Class类
现在,Class类是泛型的。例如,String.class实际上是一个Class类的对象(事实上,是唯一的对象)。
类型参数十分有用,这是因为它允许Class方法的返回值类型更加具有针对性。下面Class中的方法就使用了类型参数:
T newInstance();
T cast(Object obj);
T[] getEnumConstants();
Class<? super T> getSuperclass();
Constructor getConstructor(Class… parameterTypes);
Constructor getDeclaredConstructor(Class… paramterTypes);
newInstance 方法返回一个实例,这个实例所属的类由默认的构造器获得。他的返回类型目前被声明为T,其类型与Class描述的类相同,这样就免除了类型转换。如果给定的类型确实是T的一个子类型,cast方法就会返回一个现在声明为类型T的对象,否则,抛出一个BadCastException异常。如果这个类不是enum类或是类型T的枚举值的数组,getEnumConstants方法将返回null。最后getConstructor与getdeclaredConstructor方法返回一个Constructor对象。Constructor类也已经变成泛型,以便newInstance方法有一个正确的返回类型。

  1. T newInstance()
    返回无参数构造的一个新实例。
  2. T cast(Object obj)
    如果obj为null或有可能转换成类型T,则返回obj否则抛出BadCastException异常。
  3. T[] getEnumConstants()
    如果T是枚举类型,则返回所有值组成的数组,否则返回null
  4. Class<? super T> getSuperclass();
    返回这个类的超类。如果T不是一个类或是Object类,则返回null
  5. Constructor getConstructor(Class… parameterTypes);
    Constructor getDeclaredConstructor(Class… paramterTypes);
    获得公有的构造器,或带有给定参数的构造器
  6. T newInstance(Object… parameters)
    返回用指定参数构造的新实例。
    二、使用Class参数进行类型匹配
    有时,匹配泛型方法中的Class参数名的类型变量很有实用价值。下面是一个标准的实例:
    这里写图片描述
    Employee.class是类型Class的一个对象。makePair方法的参数类型T同Employee匹配,并且编译器可以推断出这个方法将会返回一个Pair。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值