问题描述
写了个获取调用方法的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());