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方法 西游记