return 语句在 AspectJ 通知中做什么?
What do return statements do in an AspectJ advice?
以下摘自 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
建议中的作用 - 为什么它(需要?)在那里,如果没有它会发生什么?
基本上是"return form setX()
"在方法体执行之前吗?
有手册页解释吗?
你的代码检查这个:
(!p.assertX(x))
只要上面的逻辑表达式为真,就会执行其{ }
块中的代码,包括return;
。 return
语句的要点是确保函数停止并且不会执行进一步的代码。这是一种常见的方法,以防出现错误。
为了完成@LajosArpad 的回答,before
建议只能通过抛出异常来改变流程。在保留相同流语义的同时可以防止调用建议方法的唯一建议是 around
,但在这种情况下它需要 return 本身(如果 return 类型不是 void
,当然)。
以下摘自 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
建议中的作用 - 为什么它(需要?)在那里,如果没有它会发生什么?
基本上是"return form setX()
"在方法体执行之前吗?
有手册页解释吗?
你的代码检查这个:
(!p.assertX(x))
只要上面的逻辑表达式为真,就会执行其{ }
块中的代码,包括return;
。 return
语句的要点是确保函数停止并且不会执行进一步的代码。这是一种常见的方法,以防出现错误。
为了完成@LajosArpad 的回答,before
建议只能通过抛出异常来改变流程。在保留相同流语义的同时可以防止调用建议方法的唯一建议是 around
,但在这种情况下它需要 return 本身(如果 return 类型不是 void
,当然)。