Java反射参数传递.doc_第1页
Java反射参数传递.doc_第2页
Java反射参数传递.doc_第3页
Java反射参数传递.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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(Object.objs) System.out.print(函数参数: + objs.length + -); for(Object o : objs ) System.out.print(o.toString() + ); 而当我们使用Class.getMethod,则需要传递所调用函数的参数类型。查看Class.getMethod 的API可知,需要传递的类型被表示为一个可变参数。我们知道,传递可变参数时,非序列参数会被编译成编列,即变成一个Object类型的数组,但是本身为序列的则会直接被转型Object数组。那么,前三种情况按照要求传递,则传递给getMethod的参数会被转变为一个一维的参数列表的Object数组。第四种情况,其函数本身便要求传递一个可变参数,即一个Object类型的参数。如果我们按照正常方法传递,则此Object类型的参数会被直接转型使用,而我们最终传给函数的应该是一个二维的Ojbect数组,即Object类型。getMethod方法的匹配过程是指寻找参数长度与Object数组的长度相等,且每个参数类型与Object数组每个数组项相同的方法。所以,再这种情况下,我们应当对每四种情况下将要传递的参数进行一次包装,将其包装成一个二维的Object数组。方法如下: Object obj = new Object1;String strs = new Stringxiao,she, qing; obj0 = strs ;此时的obj则是我们将要传给Class.getMethod的参数,而strs则是我们要传递给调用函数test(Object.objs)的参数。这里的obj长度为是因为可变参数在没有参数传递之前的检查时的长度为,被视为一元参数。由于Spring使用的是Java代理,所以,在Spring中会经常遇到类似的问题。具体代码如下:package test;import java.lang.reflect.InvocationTargetException;import 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.print(函数参数: + 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 : methods) 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.invoke(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.invoke(demo, str1, str2); System.out.println(-); Object obj = new Object1; obj0 = new Stringxiao, she, qing; /obj1 = new Stringxiao, qing; method = MethodDemo.class.getMethod(test, Object.class); method.invoke(demo, obj); catch (SecurityException e) / TODO Auto-generated catch block e.printStackTrace(); catch (NoSuchMethodException e) / TODO Auto-generated catch block e.printStackTrace(); catch (IllegalArgumentException e) / TODO Auto-generated catch block e.printStackTrace(); catch (IllegalAccessExceptio

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论