



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年飞行汽车考试题及答案
- 2025年度调度规程考试题库及答案
- 高铁隧道施工劳务合同(3篇)
- 高速工程施工合同(3篇)
- 高频焊檩条采购合同模板(3篇)
- n3级级护士手考试试题及答案
- 航空航天单位员工航天技术聘用合同
- 互联网餐厅厨师承包服务与管理协议
- 2025公务员真实面试题及答案
- 深圳市绿色环保产业门面租赁及市场推广协议
- 山西省太原三十七中2023-2024学年九年级上学期月考物理试卷(10月份)
- 抖音洗浴按摩足浴商家本地团购短视频直播运营策划方案【抖音本地生活运营】
- 深水井施工方案
- (幻灯片)世界各国国旗大全中文
- 碳酸乙烯亚乙酯和甲烷二磺酸亚甲酯功能添加剂在锂离子电池中的性能研究的开题报告
- 《藻类植物》授课课件
- 《禁骑电动自行车》班会课件
- 秋收活动方案
- 物流地产发展前景分析
- 三年个人成长路线图:高中数学名师工作室
- 基于机器学习的异常检测与预警机制
评论
0/150
提交评论