如何在方法内部获得该方法的Method

如何在方法内部获得该方法的Method,第1张

static log(){

String fullClassName = ThreadcurrentThread()getStackTrace()[ 3 ]getClassName() ;

String className = fullClassNamesubstring( fullClassNamelastIndexOf( "" ) + 1 ) ;

String methodName = ThreadcurrentThread()getStackTrace()[ 3 ]getMethodName() ;

}

试试这个。

Foible 朋友的说法不对。

B b=new B(); 这种方式,实际上是实例化了子类的对象,注意:内存中还是子类对象。

((A)b)m(); 表面上看起来是父类对象了,但是由于内存中是子类对象,所以调用的还是子类方法

A b=new B();

bm();

这种方法和你写的实际是一个效果,虽然上溯造型到了父类,由于子类重写了父类的方法,调用的还是子类的方法(也就是所:方法的实现,最后是在子类中实现的)。

所以,总结如下:

如果子类没有重写父类的方法,调用父类的方法的时候,实际上是去父类的内存中实现,可以调用父类方法。

如果子类重写了父类的方法,那么,你虽然上溯造型到了父类,由于内存还是子类,该方法的实现还是在子类,所以用实例化的对象是调用不到父类的,这种情况下,只能用super关键字。

用static的情况不讨论的情况下不讨论是这样的,不知道到您是否不满意,不满意的话可以发消息继续讨论。

private void beforeTransationHandle(JoinPoint point) throws Exception{

//拦截的实体类

Object target = pointgetTarget();

//拦截的方法名称

String methodName = pointgetSignature()getName();

//拦截的方法参数

Object[] args = pointgetArgs();

//拦截的放参数类型

Class[] parameterTypes = ((MethodSignature)pointgetSignature())getMethod()getParameterTypes();

Method m = null;

try {

//通过反射获得拦截的method

m = targetgetClass()getMethod(methodName, parameterTypes);

//如果是桥则要获得实际拦截的method

if(misBridge()){

for(int i = 0; i < argslength; i++){

//获得泛型类型

Class genClazz = GenericsUtilsgetSuperClassGenricType(targetgetClass());

//根据实际参数类型替换parameterType中的类型

if(args[i]getClass()isAssignableFrom(genClazz)){

parameterTypes[i] = genClazz;

}

}

//获得parameterType参数类型的方法

m = targetgetClass()getMethod(methodName, parameterTypes);

}

} catch (SecurityException e) {

eprintStackTrace();

} catch (NoSuchMethodException e) {

eprintStackTrace();

}

}

以上就是关于如何在方法内部获得该方法的Method全部的内容,包括:如何在方法内部获得该方法的Method、Java 如何在方法运行时获得当前方法的Method(实例)、AOP时,如何获取目标方法上的注解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9395723.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存