Java反射之Method对象详解
使用Java反射,可以在运行时检查一个方法的信息以及在运行期调用这个方法,通过使用java.lang.reflect.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.getDeclaringClass()
返回表示类或接口的Class对象,该类或接口声明了由此对象表示的可执行文件
method.isDefault()
如果此方法是默认方法,则返回true
否则返回false。
默认方法是public 非abstract的实例方法,即具有方法的非static方法,在接口类型中声明
通过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类型的参数,那我们必须要传入一个字符串。
Java反射之Method对象详解相关推荐
- java 反射(Reflection) 详解
jAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...
- Java反射 Class类常用方法详解
获取一个类对应的Class类的方法 1.使用Object.getClass ()方法----引用类型的对象的获取方式 如果我们已经拿到了一个对象,可以使用这个对象的 getClass 方法获得一个 C ...
- java reflections_Java反射框架Reflections示例详解
MAVEN 坐标 org.reflections reflections 0.9.10 Reflections 的作用 Reflections通过扫描classpath,索引元数据,并且允许在运行时查 ...
- java 委托机制_通过反射实现Java下的委托机制代码详解
简述 一直对Java没有现成的委托机制耿耿于怀,所幸最近有点时间,用反射写了一个简单的委托模块,以供参考. 模块API public Class Delegater()//空参构造,该类管理委托实例并 ...
- java委托机制教程_通过反射实现Java下的委托机制代码详解
简述 一直对java没有现成的委托机制耿耿于怀,所幸最近有点时间,用反射写了一个简单的委托模块,以供参考. 模块api public class delegater()//空参构造,该类管理委托实例并 ...
- java新建一个女朋友_详解java创建一个女朋友类(对象啥的new一个就是)==建造者模式,一键重写...
创建一个女朋友,她有很多的属性,比如:性别,年龄,身高,体重,类型等等,虽然每个女朋友都有这些属性,但是每个人找女朋友的要求都是不一样的,有的人喜欢男的,有的人喜欢女的,有的喜欢胖的,不同的人可以根据 ...
- Java创建comparator对象,Java Comparable 和 Comparator 的详解及区别
Java Comparable 和 Comparator 的详解及区别 Java 中为我们提供了两种比较机制:Comparable 和 Comparator,他们之间有什么区别呢?今天来了解一下. C ...
- java out对象_JSP out对象详解
JSP out对象详解 out对象就是在Web应用开发过程中使用最多的一个对象,其功能就是动态的向JSP页面输出字符流,从而把动态的内容转化成HTML形式来展示,这个对象在任何JSP页面中都可以任意访 ...
- Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3
Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3 总览 问题 详解 String.intern()的作用 link LeetCode的Two Sum题 ...
- Java中的main()方法详解
源文作者:leizhimin 源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...
最新文章
- 文本的DES加密 MD5散列值 DSA的数字签名
- 分布式事务 dtc 的使用
- 电脑计算器_手把手教你使用初级会计机考系统计算器!
- java接口抽象方法_Java 接口 抽象类 抽象方法
- 2019年度最受欢迎中国开源软件评选, 请给JeecgBoot 投票,谢谢支持
- git之checkout代码
- 【JY】力荐佳作《结构地震分析编程与应用》
- 背包问题九讲笔记-01背包问题
- 常用合同范本大全|全部是合同,多学学吧。以后少吃亏。
- 当自己觉得特别迷茫的时候,是怎么走出这个困境的
- 攻防比赛常见的打点路径有哪些
- 华为OD机试题:叠积木(Python 解法)
- 阿里云centos7部署l2tp后无法连接
- 自然》子刊同期刊发两篇重磅论文:月球上的水很多-1
- Linux下,编译程序遇到“undefined reference to XXX” 报错(可针对webots的编译,不同的文件夹下面不同的cpp,.h文件)
- kaggle竞赛 | Quora Question Pairs | 判断相似的Question
- 如何高效的完成域名实名认证
- RabbitMQ未确认消息处理
- java日志框架(一)JUL 学习 ,这个是什么,他在代码中如何使用,一篇文章讲清楚
- LINUX第一章作业
热门文章
- 2020全球搜索引擎市场份额排行榜
- 扑克牌游戏——C语言
- usb Android gentoo,gentoo usb 鼠标
- BZOJ2038: [2009国家集训队]小Z的袜子(hose) 莫队算法 莫队算法讲解及时间复杂度证明
- 多张表格链接一起——《超级处理器》应用
- 元气骑士机器人获取方法_元气骑士机器人怎么获得视频(机器人获取方法说明)...
- 逆向分析工具IDA与开源工具Ghidra、Cutter对比测评
- 《C语言程序设计》第4版 何钦铭、颜晖主编 课后习题答案 第4章 课后习题
- easypanel b.php,KangleWebServer Easypanel API接口详解
- Maya模型锁定不能编辑的解锁方法