Method对象的机制与实现
1、Method对象概述
1)java.lang.reflect.Method类是用于表示类中、接口中方法对象的类。
2)可以操作类中私有,以及公有等全部方法。
2、Method对象的常用方法介绍
方法名 | 释义 |
getName() | 获得方法名称 |
getReturnType() | 获得方法返回值类型 |
invoke(Object obj, Object ...args) | 利用obj对象调用该方法 |
getParameterTypes() | 获取方法所有参数类型,按照顺序返回class数组 |
getDeclaredAnnotations() | 获取方法的全部注解 |
package com.rainmer.main; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import com.rainmer.bean.Book; public class MethodTest { //该方法用于获取对象的所有方法名称、返回值类型、以及参数信息 public void show(Object ob){ Class cl = ob.getClass(); Method[] me= cl.getDeclaredMethods(); for (Method mm : me) { System.out.println("方法名称:"+mm.getName()); System.out.println("方法修饰符:"+Modifier.toString(mm.getModifiers())); System.out.println("方法返回值类型:"+mm.getReturnType()); Class[] preType = mm.getParameterTypes(); System.out.println("方法参数列表:"); for(Class cll : preType){ System.out.println(cll.getName()); } } } //该方法用于使用传递过来的实体对象,获取其中的方法,饼调用 public void showUse(Object ob){ Class cl = ob.getClass(); try { Method me = cl.getMethod("getName", null); me.invoke(ob, new Object[0]);//invoke援引,参数是长度为0的Object数组 Method me1 = cl.getMethod("setName", String.class); me1.invoke(ob, "西游记");//ob对象调用了me1方法 Class[] cll = {String.class, int.class}; Method me2 = cl.getMethod("test", cll); Object[] obb = {"哈哈哈", 12}; me2.invoke(ob, obb); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { Book bo = new Book(); bo.setId(1); bo.setName("我和凤姐同居的日子"); bo.setType("惊悚"); MethodTest test = new MethodTest(); test.showUse(bo); System.out.println(bo.getName()); } }
运行结果:
调用了setName方法
调用了getName方法
调用了setName方法
调用了多参数的方法
调用了getName方法
西游记