全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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年潮州辅警招聘考试真题及答案详解(历年真题)
- 2025年黄石辅警协警招聘考试备考题库附答案详解(完整版)
- 2025年海西州辅警协警招聘考试备考题库及完整答案详解一套
- 2025年铁岭辅警协警招聘考试真题及一套答案详解
- 2025年铜陵辅警招聘考试题库附答案详解(达标题)
- 2025年雅安辅警招聘考试真题及1套完整答案详解
- 2025年阿勒泰辅警招聘考试题库含答案详解(突破训练)
- 2025年深圳辅警招聘考试题库附答案详解(综合卷)
- 2025年黔西南州辅警协警招聘考试真题附答案详解(研优卷)
- 浙江省嘉兴市2025年9月高三基础测试政治含答案
- 疼痛护理新知识及新进展
- 风电场防汛课件
- 汽轮机减温减压器课件
- 护理疑难病例讨论制度
- 【《日处理6000立方米的某化工园区废水处理工程设计》23000字(论文)】
- 鼻腔冲洗护理课件
- 关节软骨力学特性-洞察及研究
- 2025年电源适配器行业研究报告及未来行业发展趋势预测
- 上海市宝山区2024-2025学年六年级(五四学制)上学期期中语文试题(含答案)
- 湖南省十五五风电项目规划
评论
0/150
提交评论