黑马程序员技术交流社区
标题:
假如一个方法中需接收多个参数,如何利用反射求出参数...
[打印本页]
作者:
luis
时间:
2014-4-15 16:58
标题:
假如一个方法中需接收多个参数,如何利用反射求出参数...
看了张老师的利用反射求参数类型的视频,但是发觉一个问题,要是方法接收的参数不一样,比如Method(Vector<string>,int x,),这里面接收了两个参数,一个是Vector集合,集合里面的元素是string型的,一个是x,x是int的,如何利用程序把他们都找出来?(张老师的只是接收一个参数Vector<Date>,没有后面的int x,)本人最想知道的是判断条件。自己也写了一个代码,但不能找到int ,会报错
package Parameter;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Vector;
/*需求:获取某个参数的参数类型(比如参赛类型是Int还是string的)
* 步骤:
* 1、由于没法直接获得参数的参数类型,可以创建一个接受参数的方法,
* 2、利用方法的反射可以获得方法参数列表
* 3、利用参数类对参数进行操作可以获得参数类型
* */
public class FindParameter
{
//定义一个接受参数的方法,假如我们要获得 v1,和x的参数类型
public static void apply(Vector<String> v1,ArrayList<String> x , int y)
{
}
public static void main(String[] args)throws Exception
{
//对方法进行反射,获取类在内存中的字节码
Class<FindParameter> findClass= FindParameter.class;
//获取类中的方法
Method applMethod = findClass.getMethod("apply",Vector.class,ArrayList.class,int.class);
//获取参数类型,由于函数里不只一种参数类型,所以需要数组形式来接收
Type[] genType = applMethod.getGenericParameterTypes();
//判断方法中接收了几个参数(假如参数是用配置文件读取来的时候)
int len = genType.length;
System.out.println("此方法接收了"+len+"个参数");
//对获得的参数类型进行迭代,
int i = 1;//用于表参数的位置
for(Type gt:genType)
{
/*把获得的参数类型转换成参数化类型,好利用参数类化类型的方法对其进行参照,比如取出原始参数
类型,实际参数类型等*/
System.out.println("第"+i+"个参数");
ParameterizedType pType = (ParameterizedType)gt;
//获得原始参数类型
Type rawtype= pType.getRawType();
//打印出原始参数类型
System.out.println("原始参数类型是:"+rawtype);
//获取实际参数类型
Type actualtype = pType.getActualTypeArguments()[0];
//打印实际参数类型
System.out.println("实际参数类型是:"+actualtype);
i++;
}
}
}
打印结果:
此方法接收了3个参数
第1个参数
原始参数类型是:Vector(前缀省略了,没写)
实际参数类型是:String
第2个参数
原始参数类型是:ArrayList
实际参数类型是:String
第3个参数
接下来是报错了,没把int打印出来,想知道这么样去设置判断条件,让他们都打印出来 tks
作者:
霍振鹏
时间:
2014-4-16 12:56
package Parameter;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.util.ArrayList;
import java.util.Vector;
/*需求:获取某个参数的参数类型(比如参赛类型是Int还是string的)
* 步骤:
* 1、由于没法直接获得参数的参数类型,可以创建一个接受参数的方法,
* 2、利用方法的反射可以获得方法参数列表
* 3、利用参数类对参数进行操作可以获得参数类型
* */
public class FindParameter
{
//定义一个接受参数的方法,假如我们要获得 v1,和x的参数类型
public static void apply(Vector<String> v1,ArrayList<String> x , int y)
{
}
public static void main(String[] args)throws Exception
{
//对方法进行反射,获取类在内存中的字节码
Class<FindParameter> findClass= FindParameter.class;
//获取类中的方法
Method applMethod = findClass.getMethod("apply",Vector.class,ArrayList.class,int.class);
//获取参数类型,由于函数里不只一种参数类型,所以需要数组形式来接收
Type[] genType = applMethod.getGenericParameterTypes();
//判断方法中接收了几个参数(假如参数是用配置文件读取来的时候)
int len = genType.length;
System.out.println("此方法接收了"+len+"个参数");
//对获得的参数类型进行迭代,
int i = 1;//用于表参数的位置
for(Type gt:genType)
{
/*把获得的参数类型转换成参数化类型,好利用参数类化类型的方法对其进行参照,比如取出原始参数
类型,实际参数类型等*/
System.out.println("第"+i+"个参数");
if(gt instanceof ParameterizedType)
{
ParameterizedType pType = (ParameterizedType)gt;
//获得原始参数类型
Type rawtype= pType.getRawType();
//打印出原始参数类型
System.out.println("原始参数类型是:"+rawtype);
//获取实际参数类型
Type actualtype = pType.getActualTypeArguments()[0];
//打印实际参数类型
System.out.println("实际参数类型是:"+actualtype);
}
else
{
System.out.println(gt);
}
i++;
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2