工作中遇到了暂且做个记录,有时间深入了解下。。。。
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