public class InvokeTester { public InvokeTester() { } String str; public InvokeTester(String str) { this.str = str; } public int add(int param1, int param2) { return param1 + param2; } public String echo(String msg) { return "echo: " + msg; } public String getStr() { return "one param ctor" + str; } public static void main(String[] args) throws Exception { //直接获取类 //Class<?> classType = InvokeTester.class; //通过完整的类型路径获取类 Class<?> classType = Class.forName("com.top.utils.InvokeTester"); //使用newInstance创建对象 // Object invokeTester = classType.newInstance(); //使用默认构造函数获取对象 Object invokeTester = classType.getConstructor(new Class[]{}).newInstance(new Object[]{}); //获取InvokeTester类的add()方法 Method addMethod = classType.getMethod("add", new Class[]{int.class, int.class}); //调用invokeTester对象上的add()方法 Object result = addMethod.invoke(invokeTester, new Object[]{new Integer(100), new Integer(200)}); System.out.println((Integer) result); //获取InvokeTester类的echo()方法 Method echoMethod = classType.getMethod("echo", new Class[]{String.class}); //调用invokeTester对象的echo()方法 result = echoMethod.invoke(invokeTester, new Object[]{"Hello"}); System.out.println((String) result); //创建有参构造函数的类对象 Object invokeTester1 = classType.getConstructor(new Class[]{String.class}).newInstance(new Object[]{new String("测试一个带参数的构造调用")}); //获取方法方式相同 Method getStrMethod = classType.getMethod("getStr"); Object str = getStrMethod.invoke(invokeTester1); System.out.println(str); } }
在例程InvokeTester类的main()方法中,运用反射机制调用一个InvokeTester对象的add()和echo()方法
add()方法的两个参数为int 类型,获得表示add()方法的Method对象的代码如下:
Method addMethod=classType.getMethod("add",new Class[]{int.class,int.class});
Method类的invoke(Object obj,Object args[])方法接收的参数必须为对象,如果参数为基本类型数据,必须转换为相应的包装类型的对象。invoke()方法的返回值总是对象,如果实际被 调用的方法的返回类型是基本类型数据,那么invoke()方法会把它转换为相应的包装类型的对象,再将其返回。
在本例中,尽管InvokeTester 类的add()方法的两个参数以及返回值都是int类型,调用add Method 对象的invoke()方法时,只能传递Integer 类型的参数,并且invoke()方法的返回类型也是Integer 类型,Integer 类是int 基本类型的包装类:
Object result=addMethod.invoke(invokeTester,
new Object[]{new Integer(100),new Integer(200)});
System.out.println((Integer)result); //result 为Integer类型
相关推荐
通过Java反射调用方法,适合初级自学者,通俗易懂
Java反射 调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用基本类型数组参数的方法 调用String数组参数的方法 调用Object数组参数的方法 调用私有方法
java 反射 调用私有方法(有参数私有方法)获取私有属性值
Java 反射创建get set方法及反射方法的调用
Java 反射调用设置值
万能的反射封装接口,值得下载参考,当成util
利用java反射原理实现方法的动态调用。
java反射调用set方法时如果让参数做自动类型转换5 这段时间学习java的反射机制想实现一个功能:遍历一个Map,然后利用反射机制调用BO的set方法,完成BO属性的自动注入。这样设计的初衷是解决Excel数据导入问题中的...
本例演示了如何使用反射,调用类的静态方法,封装了工具类ClsTool,统一实现静态方法的调用。使用反射,在特定场景下,能够很好的简化代码。例如mybatis
调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用数组参数的方法 调用私有方法
利用java的反射原理来调用 Android隐藏api 应用开发必备哦 详细描述: http://blog.csdn.net/y_haiyang/article/details/9924925 ====================关注小鱼=================== 新浪微博:...
利用java反射调用实现对字符串的解析,成功调入函数,并且返回值
该篇文章主要介绍当我们碰到参数或者返回值是一个对象时,如何通过frida反射调用该对象的方法(methods)与获取该对象的字段(fields)。感兴趣的朋友可以下载下来看看,了解了解
该资源包含了一个利用反射执行的一些操作,包含了动态执行构造方法,动态运行私有方法,为属性初始化等等,简单易懂。
代码为JAVA反射的一个DEMO,适合初学者临摹学习,还附有properties的创建方法,比较基础。
下面小编就为大家带来一篇Java 反射调用静态方法的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
通过java类的路径实例化类并调用方法:仅仅知道类的路径,就可以实例化对象,利用反射机制调用其方法
Java 反射详解(包含私有方法属性的调用)
spring与java反射结合动态定义类及调用函数,实现类的动态定义和函数的动态调用。 为有动态调用的web应用提供一点点借鉴,相互学习。
java反射机制及动态代理的ppt java反射机制及动态代理的ppt