收藏 分享(赏)

Java反射参数传递.doc

上传人:jmydc 文档编号:7232055 上传时间:2019-05-10 格式:DOC 页数:4 大小:37.50KB
下载 相关 举报
Java反射参数传递.doc_第1页
第1页 / 共4页
Java反射参数传递.doc_第2页
第2页 / 共4页
Java反射参数传递.doc_第3页
第3页 / 共4页
Java反射参数传递.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、JAVA反射参数传递概略 2009-11-30 15:57:23| 分类: Java 程序|字号 订阅使用 Method 反射调用函数时,我们通常会遇到以下几种情况:public void test()System.out.println(函数参数:0);public void test(String str)System.out.println(“函数参数:1-“ + str);public void test(String str1, String str2)System.out.println(“函数参数:2-“ + str1 +“ “ + str2);public void test(

2、Object.objs)System.out.print(“函数参数:“ + objs.length + “-“);for(Object o : objs )System.out.print(o.toString() + “ “);而当我们使用 Class.getMethod,则需要传递所调用函数的参数类型。查看Class.getMethod 的 API 可知,需要传递的类型被表示为一个可变参数。我们知道,传递可变参数时,非序列参数会被编译成编列,即变成一个 Object类型的数组,但是本身为序列的则会直接被转型 Object数组。那么,前三种情况按照要求传递,则传递给 getMethod 的

3、参数会被转变为一个一维的参数列表的 Object 数组。第四种情况,其函数本身便要求传递一个可变参数,即一个Object类型的参数。如果我们按照正常方法传递,则此 Object类型的参数会被直接转型使用,而我们最终传给函数的应该是一个二维的 Ojbect 数组,即 Object类型。getMethod 方法的匹配过程是指寻找参数长度与 Object 数组的长度相等,且每个参数类型与 Object 数组每个数组项相同的方法。所以,再这种情况下,我们应当对每四种情况下将要传递的参数进行一次包装,将其包装成一个二维的 Object 数组。方法如下:Object obj = new Object1;S

4、tring strs = new String“xiao“,“she“, “qing“;obj0 = strs ;此时的 obj 则是我们将要传给 Class.getMethod 的参数,而 strs 则是我们要传递给调用函数 test(Object.objs)的参数。这里的 obj 长度为是因为可变参数在没有参数传递之前的检查时的长度为,被视为一元参数。由于 Spring 使用的是 Java 代理,所以,在 Spring 中会经常遇到类似的问题。具体代码如下:package test;import java.lang.reflect.InvocationTargetException;imp

5、ort java.lang.reflect.Method;public class MethodDemo public void test()System.out.println(“函数参数: 0“);public void test(String str)System.out.println(“函数参数: 1-“ + str);public void test(String str1, String str2)System.out.println(“函数参数: 2-“ + str1 + “ “ + str2);public void test(Object.objs)System.out.p

6、rint(“函数参数: “ + objs.length + “-“);for(Object o : objs )System.out.print(o.toString() + “ “);/* param args*/* param args*/public static void main(String args) /testMethod();printMethodType();public static void printMethodType()Method methods = MethodDemo.class.getMethods();Class cs;for(Method m : me

7、thods)System.out.println(“-“ + m.getName() + “-“);cs = m.getParameterTypes();System.out.println(cs.length);for(Class c : cs)System.out.println(c.toString();public static void testMethod()MethodDemo demo = new MethodDemo();Method method;try method = MethodDemo.class.getMethod(“test“, null);method.inv

8、oke(demo, null);System.out.println(“-“);String content = “xiao“;method = MethodDemo.class.getMethod(“test“, String.class);method.invoke(demo, content);System.out.println(“-“);String str1 = “xiao“;String str2 = “qing“;method = MethodDemo.class.getMethod(“test“, String.class, String.class);method.invo

9、ke(demo, str1, str2);System.out.println(“-“);Object obj = new Object1;obj0 = new String“xiao“, “she“, “qing“;/obj1 = new String“xiao“, “qing“;method = MethodDemo.class.getMethod(“test“, Object.class);method.invoke(demo, obj); catch (SecurityException e) / TODO Auto-generated catch blocke.printStackT

10、race(); catch (NoSuchMethodException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IllegalArgumentException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IllegalAccessException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (InvocationTargetException e) / TODO Auto-generated catch blocke.printStackTrace();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报