关闭

getDeclaredMethod、invoke的使用

578人阅读 评论(0) 收藏 举报
分类:

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


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





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:83274次
    • 积分:1061
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:17篇
    • 译文:0篇
    • 评论:10条
    文章分类
    最新评论