A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Vector;

public class GenericTest{
        public static void main(String[] args) throws Exception{
      Method method=GenericTest.class.getMethod("applyVector", Vector.class);
      Type[] types=method.getGenericParameterTypes();
      ParameterizedType type=(ParameterizedType)types[0];//看完知识点,还是不明白这句拿到的是什么东西
      System.out.println(type.getRawType());
      System.out.println(type.getActualTypeArguments()[0]);
        }
        //在方法中既然已声明是Integer类型的,为何还要通过反射去获得,还有不明白这个方法没有任何内容,那有何实际意义呢?
        public static void applyVector(Vector<Integer> v){
        }
}

1 个回复

正序浏览
public class GenericTest{
        public static void main(String[] args) throws Exception{
      Method method=GenericTest.class.getMethod("applyVector", Vector.class);
      Type[] types=method.getGenericParameterTypes();//这里返回泛型参数类型的Type数组
      ParameterizedType type=(ParameterizedType)types[0];//这里是将Type类型转换成ParameterizedType类型,就是为了使用ParameterizedType对象的获取原始类型和
                                                                                             //实际类型两个方法,也就是下面的两个方法,type.getRawType()和type.getActualTypeArguments()[0]);
      System.out.println(type.getRawType());
      System.out.println(type.getActualTypeArguments()[0]);
        }
        //在方法中既然已声明是Integer类型的,为何还要通过反射去获得,还有不明白这个方法没有任何内容,那有何实际意义呢?
        public static void applyVector(Vector<Integer> v){
        }
}
第二个问题:当你需要在运行的时候才知道要载入哪一个类的时候,其中的泛型信息你是一无所知的.只能在动态载入时
才能通过反射获得.你自己的程序public static void applyVector(Vector<Integer> v)是你自己申明,你当然知道咯,
假如我丢给你一个类,又不告诉你源码,你知道我类中定义的泛型是什么吗?这些东西听说框架中应用得很广泛.
第三个问题,那个方法是张老师写出来做测试教学用的,有没有内容一毛钱关系都没有.只要带有泛型就可以了.

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马