gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:13:38 25 4
gpt4 key购买 nike

是否可以使用反射 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, Number n, 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", new Integer(11), 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, Number, double)
baz
11
2.718281828459045

关于Java - 获取传递给方法的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14051429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com