反射之调用普通方法

在Class类中定义有如下两个方法:
   

 - 取得全部方法:public Method[] getMethods();
 - 取得指定的方法:public Method getMothod(String name,Object ...)



 import java.lang.reflect.Method;
    /**
     * 这是核心模型,在以后的开发中经常用到该模型。
     * 通过反射类实例化对象,然后通过Object类型进行所有类的方法调用。
     * 在这里用到的方法是getMethod()和invoke()方法
     * @author Administrator
     *
     */
    class Person1111{
    	private String name;
    	private int age ;
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    }
    public class Class_reflact {
    	public static void main(String[] args) throws Exception {
    		String attribute = "name";//设置属性值,首字母必须大写
    		String value = "hello";//设置setName的值为hello
    		Class cls = Class.forName("反射.Person");//通过Class类模型,获取Class类的对象,并没有实例化
    		Object obj = cls.newInstance();//通过反射实例化对象
    		//通过getMethod方法类获取所有的方法,"set"+setName(attribute)等价于setName,而setName的属性是String类型.
    		//通过getMethod()方法获取setName()方法
    		Method setMethod = cls.getMethod("set"+setName(attribute), String.class);
    		//System.out.println(setMethod);
    		//相当于Person对象,setName(String value);
    		//获取到了setName()方法,接下来通过invoke()方法设置值,在所有的类中,都要实例化对象,所以传参数obj.
    		setMethod.invoke(obj,value);
    		//通过getMethod方法类获取所有的方法
    		Method getMethod = cls.getMethod("get"+setName(attribute));//getName()
    		System.out.println(getMethod);
    		//相当于Person对象,setName(String value);
    		Object invoke = getMethod.invoke(obj);//obj实例化对象
    		System.out.println(invoke);
    	}
    	public static String setName(String name){
    		return name.substring(0, 1).toUpperCase()+name.substring(1);//将第一个字母大写,其余的字母小写
    	}
    }

在java.lang.reflect.method中,提供了一个invoke(Object obj)方法调用支持。对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。个别参数被自动解包,以便与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换。

你可能感兴趣的:(IT,编程,java,计算机)