Java Reflection(四):方法
来源:互联网 发布:mac开压缩包有广告 编辑:程序博客网 时间:2024/05/23 05:10
使用Java反射你可以在运行期检查一个方法的信息以及在运行期调用这个方法,通过使用java.lang.reflect.Method类就可以实现上述功能。在本节会带你深入了解Method对象的信息。
获取Method对象
可以通过Class对象获取Method对象,如下例:
Class aClass = ...//获取Class对象Method[] methods = aClass.getMethods();
返回的Method对象数组包含了指定类中声明为公有的(public)的所有变量集合。
如果你知道你要调用方法的具体参数类型,你就可以直接通过参数类型来获取指定的方法,下面这个例子中返回方法对象名称是“doSomething”,他的方法参数是String类型:
Class aClass = ...//获取Class对象Method method = aClass.getMethod("doSomething", new Class[]{String.class});
如果根据给定的方法名称以及参数类型无法匹配到相应的方法,则会抛出NoSuchMethodException。
如果你想要获取的方法没有参数,那么在调用getMethod()方法时第二个参数传入null即可,就像这样:
Class aClass = ...//获取Class对象Method method = aClass.getMethod("doSomething", null);
方法参数以及返回类型
你可以获取指定方法的方法参数是哪些:
Method method = ... //获取Class对象Class[] parameterTypes = method.getParameterTypes();
你可以获取指定方法的返回类型:
Method method = ... //获取Class对象Class returnType = method.getReturnType();
通过Method对象调用方法
你可以通过如下方式来调用一个方法:
//获取一个方法名为doSomesthing,参数类型为String的方法Method method = MyObject.class.getMethod("doSomething", String.class);Object returnValue = method.invoke(null, "parameter-value1");
传入的null参数是你要调用方法的对象,如果是一个静态方法调用的话则可以用null代替指定对象作为invoke()的参数,在上面这个例子中,如果doSomething不是静态方法的话,你就要传入有效的MyObject实例而不是null。
Method.invoke(Object target, Object … parameters)方法的第二个参数是一个可变参数列表,但是你必须要传入与你要调用方法的形参一一对应的实参。就像上个例子那样,方法需要String类型的参数,那我们必须要传入一个字符串。
转载自并发编程网 – ifeve.com
原文链接:Java Reflection(五):方法
- Java Reflection(四):方法
- Java Reflection(四):变量
- Java Reflection(四):变量
- Java Reflection(五):方法
- Java Reflection(五):方法
- Java反射(Reflection)
- Java 反射(Reflection)
- Java 反射(Reflection)
- Java 反射(Reflection)
- Java Reflection(七):私有变量和私有方法
- Java Reflection 教程(5):Methods 类方法
- JAVA 中反射方法 reflection method
- java反射学习(Reflection)
- java反射学习(Reflection)
- Java反射机制(Reflection )
- Java Reflection(二):Classes
- Java Reflection(五):变量
- Java Reflection(八):注解
- Delphi中Chrome Chromium、Cef3学习笔记(二)
- Android开发—1.NDK开发入门与SO模块生成
- android网络请求不能放在主线程
- 让自己痛苦的工作不是好工作
- 字符串-02 删除字符串中的子串(20)
- Java Reflection(四):方法
- Eclipse+PyDev+Django+Mysql搭建Python web开发环境
- MIME_TYPE总结
- Intent带参数跳转
- iOS开发之即时通讯之环信
- 被虐记 2 期末测试
- LintCode Flip Bits 将整数A转换为B
- heartbeat配置
- 2015国际癫痫关爱日 昆明军海作为西南地区唯一受邀医院与会