反射之调用普通方法

46 篇文章 0 订阅
45 篇文章 0 订阅
在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 对象表示的底层方法。个别参数被自动解包,以便与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值