获取一个类下的所有方法

可以获取类类型后,获取到所有方法及相关信息

  • Method[] ms = c.getMethods(); 获取方法列表(public)
  • Method[] ms = c.getDeclaredMethods(); 获取所有声明了的方法列表
  • Class c = m.getReturnType(); 获取返回值类型
  • String name = m.getName(); 获取方法名称
  • Class[] cs = m.getParameterTypes(); 获取某个方法参数列表
  • String name = c.getName(); 获取类名称(全称包含包名)
  • String sinpleName = c.getSimpleName(); 获取简称(只有类名)
  • Method m = c.getMethod("name",new Class[]{int.class,int.class,...}); 获取指定名称,参数列表的方法
  • Object o = m.invoke(obj,param1,param2...); 调用方法,第一个参数为该类对象,后面为参数列表

Demo:

public class ClassUtil {
/**
* 该方法输出一个对象所属类的所有方法
* @param 一个需要输出的对象,如1,“a”
*/
public static void printClassMethods(Object obj){
//获取入参的类类型
Class c = obj.getClass();
//根据类类型,获取该类型下所有方法
Method[] ms = c.getMethods();
for (Method method : ms) {
//获取返回值
System.out.print(method.getReturnType().getName()+" ");
//获取方法名称
System.out.print(method.getName()+"(");
//获取参数类型列表,如int,string
Class[] paramClass =method.getParameterTypes();
for (Class p : paramClass) {
//输出参数类型名称
System.out.print(p.getSimpleName()+",");
}
System.out.println(")");
}
}
}

Demo2-指定方法获取调用:

    Demo d = new Demo();
Class a = d.getClass();
// 获取指定的方法
Method m = null;
try {
m = a.getMethod("print", new Class[] { int.class, int.class });
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
// 方法的反射调用
Object o = null;
try {
//invoke(obj,param1,param2...)
o=m.invoke(d, 1, 2);
//返回o,若为void,返回null,否则为返回类型对象
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} class Demo {
public void print(String a, String b) {
System.out.println(a + b);
} public void print(int a, int b) {
System.out.println(a + b);
}
}

最新文章

  1. Acadia Lab 6 轮盘游戏机
  2. git reflog 和git log :no branch git 提交方式
  3. How I Mathematician Wonder What You Are! - POJ 3130(求多边形的核)
  4. 索引时利用K-邻近算法过滤重复歌曲
  5. 【iOS发展-28】制造业UITabBarController标记控制器、定制UITabBarItem文字图像6途径和More评论
  6. CSS中!important的使用 转
  7. 如何在container中编译dotnet的eShopOnContainers
  8. 找到链表的倒数第K位
  9. 初识Selenium以及Selenium常用工具的简单介绍
  10. [测试题]gentree
  11. React 深入系列4:组件的生命周期
  12. Linux重启命令
  13. freemarker导出word档
  14. 云计算底层技术-虚拟网络设备(Bridge,VLAN)( 转发)
  15. localhost和127.0.0.1及ip区别
  16. 老司机在zabbix上的一次翻车
  17. 【链接】linuxCentOS权限问题修复(chmod777-R或者chmod755- http://www.cnblogs.com/kofxxf/p/5220836.html
  18. Android开发 ---如何操作资源目录中的资源文件2
  19. CentOS-6.4 安装 PHP Memcached 扩展
  20. 【SPOJ419】Transposing is Fun Pólya定理+欧拉函数

热门文章

  1. curl获取远程页面
  2. 每个开发者都应该知道的SOLID原则
  3. 【Hadoop】MapReduce自定义分区Partition输出各运营商的手机号码
  4. Claymore's Dua Miner挖矿教程
  5. lua学习笔记4--XLua
  6. JAVA上传文件到数据库
  7. VMware Conveter Standalone agent 安装时出现Error 29190错误的解决办法
  8. centos 7 cloudera-manager5.16.2,CDH5.16.2安装升级spark2.4.0
  9. LC 752 Open the Lock
  10. ci框架读取上传的excel文件数据