getDeclaredMethod、invoke的使用

工作中遇到了暂且做个记录,有时间深入了解下。。。。


getDeclaredMethod:返回方法对象;

invoke:简单理解就是在不知道对象的前提下,通过配置的参数来调用方法


      网上还有一个解释:就是调用类中的方法,最简单的用法是可以把方法参数化
invoke(class, method)
比如你Test类里有一系列名字相似的方法setValue1、setValue2等等
可以把方法名存进数组v[],然后循环里invoke(test,v[i]),就顺序调用了全部setValue


如下代码:

package aaaaa.aaaaa;

public class FromObject {
private String name;

public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

}


package aaaaa.aaaaa;

public class ToObject {
private String name;

public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

}


package aaaaa.aaaaa;

import java.lang.reflect.InvocationTargetException;

/**
 * mengpaopao
 * 对象的转化
 */
public class TestMain 
{
    public static void main( String[] args )
    {
		FromObject fo = new FromObject();
		fo.setName("heheheheh");
		ToObject to = new ToObject();
		Class<? extends Object> foClass = fo.getClass();
		try {
			to.setName((String) foClass.getDeclaredMethod("getName").invoke(fo));
		} catch (IllegalAccessException e) {
 			e.printStackTrace();
		} catch (IllegalArgumentException e) {
 			e.printStackTrace();
		} catch (InvocationTargetException e) {
 			e.printStackTrace();
		} catch (NoSuchMethodException e) {
 			e.printStackTrace();
		} catch (SecurityException e) {
 			e.printStackTrace();
		}
try {
	System.out.println("*********************"+ foClass.getDeclaredMethod("getName"));
} catch (NoSuchMethodException e) {
 	e.printStackTrace();
} catch (SecurityException e) {
 	e.printStackTrace();
}
try {
	System.out.println("*********************"+(String) foClass.getDeclaredMethod("getName").invoke(fo));
} catch (IllegalAccessException e) {
 	e.printStackTrace();
} catch (IllegalArgumentException e) {
  } catch (InvocationTargetException e) {
 	e.printStackTrace();
} catch (NoSuchMethodException e) {
 	e.printStackTrace();
} catch (SecurityException e) {
 	e.printStackTrace();
}
    }
}

打印如下:
*********************public java.lang.String aaaaa.aaaaa.FromObject.getName()
*********************heheheheh





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值