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

问题描述

写了个获取调用方法的method对象的方法,但是无法区分重载方法publicstaticMethodgetCurrentMethod(){StackTraceElement[]yste=Thread.currentThread().getStackTrace();if(yste.length<2){returnnull;}/**getMethodName**/Stringstr="";for(inti=0;i<yste.length;i++){if(yste[i].getMethodName().equals("getCurrentMethod")){Class<?>cC=null;try{cC=Class.forName(yste[i+1].getClassName());}catch(ClassNotFoundExceptione){e.printStackTrace();}Method[]ym=cC.getMethods();str=yste[i+1].toString();str=str.substring(0,str.lastIndexOf('('));for(intj=0;j<ym.length;j++){if(str.endsWith(ym[j].getName())){returnym[j];}}}}returnnull;}

解决方案

本帖最后由 qgbcs 于 2014-09-28 17:26:31 编辑
解决方案二:
可以通过ym.getParameterTypes()方法获取参数类型数组,就可以区分了啊。重载方法参数是不一样的。
解决方案三:
引用1楼rumlee的回复:

可以通过ym.getParameterTypes()方法获取参数类型数组,就可以区分了啊。重载方法参数是不一样的。

但是调用者在调用getCurrentMethod()时。如果不给出参数类型,没有别的办法可以获取自身的method对象吗?如果说一个类的对象直接调用this.getClass()可以获取类型自身的信息那为什么方法不可以直接获取方法自身的信息呢?
解决方案四:
引用2楼qgbcs的回复:

Quote: 引用1楼rumlee的回复:
可以通过ym.getParameterTypes()方法获取参数类型数组,就可以区分了啊。重载方法参数是不一样的。

但是调用者在调用getCurrentMethod()时。如果不给出参数类型,没有别的办法可以获取自身的method对象吗?如果说一个类的对象直接调用this.getClass()可以获取类型自身的信息那为什么方法不可以直接获取方法自身的信息呢?

不知道你的意思是什么,干嘛要获取当前method对象,如果想调用当前方法直接递归不就得了。如果你是想获取当前方法的名称则可以这样获取。Throwablet=newThrowable();StackTraceElement[]stes=t.getStackTrace();System.out.println(stes[0].getMethodName());

时间: 2024-10-03 10:43:32

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

通过java反射机制动态调用某方法的总结(推荐)_java

如下: public Object invokeMethod(String className, String methodName, Object[] args) throws Exception{ Class ownerClass = Class.forName(className); Object owner = ownerClass.newInstance(); Class[] argsClass = new Class[args.length]; for (int i = 0, j =

一个例子让你了解Java反射机制

通俗地说,反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,希望读者能理解,也就是说,类,类的成员,我们在运行的时候还可以动态地去操作他们. 理论的东东太多也没用,下面我们看看实践 Demo - Demo: package cn.lee.demo; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetExce

java反射机制 getreturntype是如何知道方法返回值类型的

问题描述 java反射机制 getreturntype是如何知道方法返回值类型的 各位大神,小弟有一事不明 我们有一个变量,就是方法名 java反射机制 getReturnType()是如何知道我要定义的这个方法的返回值类型. 它怎么知道我要的这个方法应该返回什么值?? 解决方案 java编译后的.class文件里面记录了类的全部信息,包括方法的返回值.参数.异常等.程序运行时,.class文件会被加载到运行时数据区,java反射 机制就是从类型信息中获取装载类解析后的详细信息的. 解决方案二:

Java反射机制既然可以拿到class对象,知道其中方法为啥不直接使用对象调用方法?

问题描述 Java反射机制既然可以拿到class对象,知道其中方法为啥不直接使用对象调用方法? Java反射机制既然可以拿到class对象,知道其中方法为啥不直接使用对象调用方法?而要invoke来调用对象的方法? 解决方案 知道方法的话当然可以不用invoke.需要invoke的方法大多是在写代码的时候无法确定的 解决方案二: 问题出现的场景是什么? 解决方案三: 面向接口,有些包是不同厂商实现的 反射能通过编译,在运行时才报错 解决方案四: 没有你想的那么简单,你多看看java的设计模式,和

利用java反射机制实现自动调用类的简单方法_java

1. 新建TestServlet类 package com.yanek.test; import java.io.IOException; import java.lang.reflect.Method; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.ht

利用java反射机制调用类的私有方法(推荐)_java

试想一下,如果你可以轻易地调用一个类的私有方法,那么是不是说你的封装都失效了?最近在看java的反射机制,发现居然可以利用java的反射机制去调用其他类的私有方法,至于这能干什么,那就见人见智了.. 我写的一段简易实例代码如下: import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * @author thomaslwq * @version 创建时间:Sep 4, 201

【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】

方法1:通过get()方法获取属性值   package com.sxd.test.controller; public class FirstCa{ private Integer num; private String name; private Boolean flag; public Integer getNum() { return num; } public void setNum(Integer num) { this.num = num; } public String getN

Java反射机制:包括组成、结构和示例说明等内容

第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据"类的部分已经的信息"来还原"类的全部的信息".这里"类的部分已经的信息",可以是"类名"或"类的对象"等信息."类的全部信息"就是指"类的属性,方法,继承关系和Annotation注解"等内容. 举个简单的例子:假设对于类ReflectionTest.java,我们知道的

java反射机制系列(三)例子分析

上一篇中,通过例子我们知道了如何利用反射机制创建对象,获得类变量和调用方法等.创建对象的语句是 Class cla = Class.forName(type); Object obj = cla.newInstance(); 这里newInstance()实际上是使用了该类的默认无参构造方法.如果我们要调用其它的构造方法就要稍微复杂一点.比如我们要创建一个StringBuffer对象,用new 操作符应该是StringBuffer br = new StringBuffer("example&q