使用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对象详解相关推荐

  1. java 反射(Reflection) 详解

    jAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...

  2. Java反射 Class类常用方法详解

    获取一个类对应的Class类的方法 1.使用Object.getClass ()方法----引用类型的对象的获取方式 如果我们已经拿到了一个对象,可以使用这个对象的 getClass 方法获得一个 C ...

  3. java reflections_Java反射框架Reflections示例详解

    MAVEN 坐标 org.reflections reflections 0.9.10 Reflections 的作用 Reflections通过扫描classpath,索引元数据,并且允许在运行时查 ...

  4. java 委托机制_通过反射实现Java下的委托机制代码详解

    简述 一直对Java没有现成的委托机制耿耿于怀,所幸最近有点时间,用反射写了一个简单的委托模块,以供参考. 模块API public Class Delegater()//空参构造,该类管理委托实例并 ...

  5. java委托机制教程_通过反射实现Java下的委托机制代码详解

    简述 一直对java没有现成的委托机制耿耿于怀,所幸最近有点时间,用反射写了一个简单的委托模块,以供参考. 模块api public class delegater()//空参构造,该类管理委托实例并 ...

  6. java新建一个女朋友_详解java创建一个女朋友类(对象啥的new一个就是)==建造者模式,一键重写...

    创建一个女朋友,她有很多的属性,比如:性别,年龄,身高,体重,类型等等,虽然每个女朋友都有这些属性,但是每个人找女朋友的要求都是不一样的,有的人喜欢男的,有的人喜欢女的,有的喜欢胖的,不同的人可以根据 ...

  7. Java创建comparator对象,Java Comparable 和 Comparator 的详解及区别

    Java Comparable 和 Comparator 的详解及区别 Java 中为我们提供了两种比较机制:Comparable 和 Comparator,他们之间有什么区别呢?今天来了解一下. C ...

  8. java out对象_JSP out对象详解

    JSP out对象详解 out对象就是在Web应用开发过程中使用最多的一个对象,其功能就是动态的向JSP页面输出字符流,从而把动态的内容转化成HTML形式来展示,这个对象在任何JSP页面中都可以任意访 ...

  9. Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3

    Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3 总览 问题 详解 String.intern()的作用 link LeetCode的Two Sum题 ...

  10. Java中的main()方法详解

    源文作者:leizhimin    源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...

最新文章

  1. 文本的DES加密 MD5散列值 DSA的数字签名
  2. 分布式事务 dtc 的使用
  3. 电脑计算器_手把手教你使用初级会计机考系统计算器!
  4. java接口抽象方法_Java 接口 抽象类 抽象方法
  5. 2019年度最受欢迎中国开源软件评选, 请给JeecgBoot 投票,谢谢支持
  6. git之checkout代码
  7. 【JY】力荐佳作《结构地震分析编程与应用》
  8. 背包问题九讲笔记-01背包问题
  9. 常用合同范本大全|全部是合同,多学学吧。以后少吃亏。
  10. 当自己觉得特别迷茫的时候,是怎么走出这个困境的
  11. 攻防比赛常见的打点路径有哪些
  12. 华为OD机试题:叠积木(Python 解法)
  13. 阿里云centos7部署l2tp后无法连接
  14. 自然》子刊同期刊发两篇重磅论文:月球上的水很多-1
  15. Linux下,编译程序遇到“undefined reference to XXX” 报错(可针对webots的编译,不同的文件夹下面不同的cpp,.h文件)
  16. kaggle竞赛 | Quora Question Pairs | 判断相似的Question
  17. 如何高效的完成域名实名认证
  18. RabbitMQ未确认消息处理
  19. java日志框架(一)JUL 学习 ,这个是什么,他在代码中如何使用,一篇文章讲清楚
  20. LINUX第一章作业

热门文章

  1. 2020全球搜索引擎市场份额排行榜
  2. 扑克牌游戏——C语言
  3. usb Android gentoo,gentoo usb 鼠标
  4. BZOJ2038: [2009国家集训队]小Z的袜子(hose) 莫队算法 莫队算法讲解及时间复杂度证明
  5. 多张表格链接一起——《超级处理器》应用
  6. 元气骑士机器人获取方法_元气骑士机器人怎么获得视频(机器人获取方法说明)...
  7. 逆向分析工具IDA与开源工具Ghidra、Cutter对比测评
  8. 《C语言程序设计》第4版 何钦铭、颜晖主编 课后习题答案 第4章 课后习题
  9. easypanel b.php,KangleWebServer Easypanel API接口详解
  10. Maya模型锁定不能编辑的解锁方法