返回语句在AspectJ建议中做了什么?

时间:2015-03-11 11:00:41

标签: aspectj

以下是AspectJ example的摘录:

class Point  {
      int x, y;

      public void setX(int x) { this.x = x; }
      // ...
  }

  aspect PointAssertions {

      private boolean Point.assertX(int x) {
          return (x <= 100 && x >= 0);
      }
      // ...

      before(Point p, int x): target(p) && args(x) && call(void setX(int)) {
          if (!p.assertX(x)) {
              System.out.println("Illegal value for x"); return;
          }
      }
      // ...
  }

有人可以请我澄清一下return;声明在before建议中的作用 - 它为什么(需要?)以及没有它会发生什么?

在执行方法体之前,它基本上会“返回setX()”吗?

是否有手册页解释它?

2 个答案:

答案 0 :(得分:2)

要完成@LajosArpad的答案,before建议只能通过抛出异常来改变流程。唯一可以阻止在保留相同流语义的同时调用建议方法的建议是around,但在这种情况下它需要返回一些东西(当然,如果返回类型不是void)。

答案 1 :(得分:1)

您的代码会检查:

(!p.assertX(x))

只要上面的逻辑表达式为真,就会执行{ }块中的代码,包括return;return语句的要点是确保函数停止,不再执行任何代码。如果出现错误,这是一种常见的方法。