gpt4 book ai didi

methods - 使用 AspectJ 获取方法参数值

转载 作者:行者123 更新时间:2023-12-04 12:12:16 24 4
gpt4 key购买 nike

我正在使用 AspectJ 来捕获方法调用。然后我需要获取方法名称和传递的参数值。
让我们看看下面的例子:

Line2D line = new Line2D.Double(lineStart, lineEnd);
and graphics.draw(line);

我需要捕获对 Graphics2D.draw(Shape) 的所有调用.我有一个切入点可以做到这一点:
pointcut captureCallParameters(Shape name) : call(* *(Shape)) && args(name);

问题是当我尝试获取参数的值(此方法中的形状)时。我得到这个参数: java.awt.geom.Line2D$Double@596e1fb1
Instad 我想获得在这种情况下是一条线的形状的点。

另一方面,我还有一个切入点,它与上面提到的新线的构造相匹配,并且我能够获得该线的参数。但我不知道如何将 Draw 方法与该行构造函数联系起来。我可以有多个 Line 的构造函数我不知道是哪一个 Line s 是使用 Draw(line) 绘制的方法。

最佳答案

你完全正确!

您确实找到了您正在寻找的 Line2D 实例。但是,您似乎正在打印 shape System.out.println(shape) 中的变量陈述。你有什么java.awt.geom.Line2D$Double@596e1fb1是变量的标识符。您现在可以通过调用任何可用的方法(例如 shape.getBounds() )来访问变量的内容。

此外,您可以执行以下操作:

Line2D line = (Line2D) shape; // cast it to Line2D
line.getX1(); // will give you X1 of your line
line.getX2(); // will give you X2 of your line

最后一点,这是您用例的更好切入点定义:
pointcut captureCallParameters(Shape shape) : call(* Graphics2D.draw(..)) && args(shape);

在您的切入点中,您将拦截所有具有 Shape 参数的方法调用。在我的版本中,您将只捕获 draw() 方法的调用。

关于methods - 使用 AspectJ 获取方法参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8208908/

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