java 反射 根据不同方法,不同参数动态调用方法

阅读更多
package com.springapp.mvc;

import java.lang.reflect.Method;


public class helloWord {

    /**
     * @param args
     */
    public static void main(String[] args) {
        try {
            Hello h=new Hello();
            Object[] argspara=new Object[]{};
            Object aa = helloWord.invokeMethod(h,"helloStrs",argspara);
            System.out.println("*******"+aa.toString()+"*******");

            helloWord.invokeMethod(h, "helloStrs",argspara);
            argspara=new Object[]{"he"};
            helloWord.invokeMethod(h, "helloStrs",argspara);
            argspara=new Object[]{"she",2};
            helloWord.invokeMethod(h, "helloStrs2",argspara);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 反射调用方法
     * @param newObj 实例化的一个对象
     * @param methodName 对象的方法名
     * @param args 参数数组
     * @return 返回值
     * @throws Exception
     */
    public static Object invokeMethod(Object newObj, String methodName, Object[] args)throws Exception {
        Class ownerClass = newObj.getClass();
        Class[] argsClass = new Class[args.length];
        for (int i = 0, j = args.length; i < j; i++) {
            argsClass[i] = args[i].getClass();
        }
        Method method = ownerClass.getMethod(methodName, argsClass);
        return method.invoke(newObj, args);
    }

}

class Hello{

    public String helloStrs(){
        //根据不同的方法名称,调用不用的方法
        System.out.println("hello1");
        return "hello1";
    }

    public void helloStrs(String a) {
        //根据不同的方法名称,调用不用的方法
        System.out.println("hello11");
    }

    public void helloStrs2(String a ,Integer b) throws Exception{
        //根据不同的方法名称,调用不用的方法
        System.out.println("hello12");
    }
}


你可能感兴趣的:(java)