java反射机制入门3

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

原文地址:https://www.cnblogs.com/rainmer/p/4665394.html