博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA
阅读量:5267 次
发布时间:2019-06-14

本文共 2400 字,大约阅读时间需要 8 分钟。

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类型

转载于:https://www.cnblogs.com/dhserena/p/5048267.html

你可能感兴趣的文章
简述spring中常有的几种advice?
查看>>
整理推荐的CSS属性书写顺序
查看>>
ServerSocket和Socket通信
查看>>
css & input type & search icon
查看>>
源代码的下载和编译读后感
查看>>
Kafka学习笔记
查看>>
Octotree Chrome安装与使用方法
查看>>
Windows 环境下基于 Redis 的 Celery 任务调度模块的实现
查看>>
趣谈Java变量的可见性问题
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
验证组件FluentValidation的使用示例
查看>>
0320-学习进度条
查看>>
解决windows系统的oracle数据库不能启动ora-00119和ora-00130的问题
查看>>
ip相关问题解答
查看>>
MetaWeblog API Test
查看>>
反弹SHELL
查看>>
关闭Chrome浏览器的自动更新和升级提示
查看>>
移动、尺寸改变
查看>>