Java – 获取传递给方法的参数?

前端之家收集整理的这篇文章主要介绍了Java – 获取传递给方法的参数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

是否可以使用反射api将参数传递给Java中的方法

是否可以使用像AspectJ这样的AOP库实现这一目标?

我在Android上运行.

public abstract class Base {

   public void printArguments() {

      //Here I need to get access to arg1,arg2,arg3
   }

}

.

public class MyClass extends Base {

   public void (String arg1,Integer arg2,String arg3) {

      super.printArguments();      
   }
}
最佳答案

Is it possible to achieve this using AOP libraries like AspectJ?

当然可以.这是AspectJ中典型的初学者练习,如下所示:

public class SampleClass {
    public SampleClass() { super(); }
    public SampleClass(String s) { this(); }
    public SampleClass(int i) { this(); }
    public void method01(String s,Number n,Throwable t) {}
    public void method02(int i,String s,double d) {}
    public void method03(String s) {}
    public void method04() {}
    public void method05(String s,double d) {}

    public static void main(String[] args) {
        new SampleClass().method01("foo",new Integer(11),new RuntimeException("error"));
        new SampleClass("test").method02(11,"bar",Math.PI);
        new SampleClass(123).method03("zot");
        new SampleClass("another test").method04();
        new SampleClass(456).method05("baz",Math.E);
    }
}

现在你只需要编写一个截取所有方法执行的方面(以及可选的构造函数执行,如下所示):

public aspect MethodArgsAspect {
    pointcut allMethods()      : execution(* *(..));
    pointcut allConstructors() : execution(*.new(..));

    before() : !within(MethodArgsAspect) && (allMethods() || allConstructors()) {
        System.out.println(thisJoinPointStaticPart.getSignature());
        for (Object arg : thisJoinPoint.getArgs())
            System.out.println("    " + arg);
    }
}

运行SampleClass.main时,此方面将打印:

void SampleClass.main(String[])
    [Ljava.lang.String;@7fdcde
SampleClass()
void SampleClass.method01(String,Number,Throwable)
    foo
    11
    java.lang.RuntimeException: error
SampleClass()
SampleClass(String)
    test
void SampleClass.method02(int,String,double)
    11
    bar
    3.141592653589793
SampleClass()
SampleClass(int)
    123
void SampleClass.method03(String)
    zot
SampleClass()
SampleClass(String)
    another test
void SampleClass.method04()
SampleClass()
SampleClass(int)
    456
void SampleClass.method05(String,double)
    baz
    11
    2.718281828459045

猜你在找的Java相关文章