java反射机制如何 得到当前方法的 method对象

qgbcs 2014-09-28 05:11:13
写了 个获取调用方法的 method对象的方法,但是 无法区分重载方法
public static Method getCurrentMethod() {
StackTraceElement[] yste = Thread.currentThread().getStackTrace();
if (yste.length<2) {
return null;
}
/**getMethodName**/
String str="";
for (int i = 0; i < yste.length; i++) {
if(yste[i].getMethodName().equals("getCurrentMethod")){
Class<?> cC=null;
try {
cC=Class.forName(yste[i+1].getClassName());
} catch (ClassNotFoundException e) { e.printStackTrace();}
Method[] ym=cC.getMethods();
str= yste[i+1].toString();
str=str.substring(0, str.lastIndexOf('('));

for (int j = 0; j < ym.length; j++) {
if (str.endsWith(ym[j].getName())){
return ym[j];
}
}
}
}
return null;
}
...全文
1069 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
rumlee 2014-09-29
  • 打赏
  • 举报
回复
引用 2 楼 qgbcs 的回复:
[quote=引用 1 楼 rumlee 的回复:] 可以通过ym.getParameterTypes()方法获取参数类型数组,就可以区分了啊。重载方法参数是不一样的。
但是调用者 在调用getCurrentMethod()时。如果不给出参数类型,没有别的办法可以获取 自身的method对象吗? 如果说一个类的对象直接调用 this.getClass()可以获取类型自身的信息 那为什么方法不可以直接获取方法自身的信息呢?[/quote] 不知道你的意思是什么,干嘛要获取当前method对象,如果想调用当前方法直接递归不就得了。 如果你是想获取当前方法的名称则可以这样获取。

		Throwable t = new Throwable();
		StackTraceElement[] stes = t.getStackTrace();
		System.out.println(stes[0].getMethodName());
qgbcs 2014-09-28
  • 打赏
  • 举报
回复
引用 1 楼 rumlee 的回复:
可以通过ym.getParameterTypes()方法获取参数类型数组,就可以区分了啊。重载方法参数是不一样的。
但是调用者 在调用getCurrentMethod()时。如果不给出参数类型,没有别的办法可以获取 自身的method对象吗? 如果说一个类的对象直接调用 this.getClass()可以获取类型自身的信息 那为什么方法不可以直接获取方法自身的信息呢?
rumlee 2014-09-28
  • 打赏
  • 举报
回复
可以通过ym.getParameterTypes()方法获取参数类型数组,就可以区分了啊。重载方法参数是不一样的。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧