getDeclaredMethod、invoke的使用

原创 2016年06月01日 18:26:29

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


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





java.lang.Class.getDeclaredMethod()方法详解

java.lang.Class.getDeclaredMethod()方法用法 注:方法返回一个Method对象,它反映此Class对象所表示的类或接口的指定已声明方法。 描述 ja...
  • gao_chun
  • gao_chun
  • 2015年01月19日 17:14
  • 14480

关于getDeclaredMethod一些用法

public class Test { public void test(int x){ System.out.println(x); } public static void mai...
  • jiafu1115
  • jiafu1115
  • 2011年09月12日 21:07
  • 13363

java中通过反射获取方法并且调用(getMethod和invoke深入)实践

为了支持业务的快速变更,往往采用可配置的方式,将业务逻辑的处理部分配置在数据库中或者XMl文件里。配置什么,如何配置才更灵活,That's a problem. 以数据库配置为例(xml相同),在数据...
  • wawmg
  • wawmg
  • 2013年12月17日 00:43
  • 31743

Java反射之 getMethod() 与invoke的使用

1、forName 方法    forName是一个静态方法,其作用:通过调用来获取类名对应的Class对象,同时将Class对象加载进来。   如果将类名保存在字符串(如xml)中,就可以在程序运行...
  • lycorisradiata_1
  • lycorisradiata_1
  • 2015年09月16日 14:08
  • 1137

java.lang.Class.getDeclaredMethod()方法

java.lang.Class.getDeclaredMethod()方法用法实例教程 - 方法返回一个Method对象,它反映此Class对象所表示的类或接口的指定已声明方法。...
  • s445320
  • s445320
  • 2016年09月27日 21:28
  • 1453

Xposed学习二:实现机制

转:http://blog.csdn.net/a6624624/article/details/48138475 在上一篇我们学习了如何在AS中创建Xposed模块,本篇来分析下官方教程...
  • zhangmiaoping23
  • zhangmiaoping23
  • 2016年09月19日 12:51
  • 496

Java 反射机制中 getMethod()和getDeclaredMethod()区别

今天在程序中用到java反射机制时,遇到的问题记录一下:我当时遇到的问题是,我用反射getMethod()调用类方法时,发生 NoSuchMethodException异常,后来上网发现getMeth...
  • u011721609
  • u011721609
  • 2015年08月03日 15:24
  • 2267

java反射中getDeclaredMethods和getMethods的区别

getMethods public Method[] getMethods() throws SecurityException 返回一个包含某些 Method 对象的数组,这些对象反映此 Cla...
  • woshixuye
  • woshixuye
  • 2012年03月26日 20:14
  • 6324

xposed 框架学习

xposed 框架学习 xposed 框架学习 一xposed 启动过程 app_main 虚拟机 二hook流程分析 findAndHookMethod findMethodExact hookMe...
  • djhsws
  • djhsws
  • 2015年11月08日 09:39
  • 1645

CMDUtil 字节处理类

package cn.sigangjun.connect.base.util; import java.lang.reflect.Field; import java.lang.reflect.In...
  • sigangjun
  • sigangjun
  • 2014年04月11日 17:29
  • 1128
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:getDeclaredMethod、invoke的使用
举报原因:
原因补充:

(最多只允许输入30个字)