0
我有这样一个抽象方面:AspectJ的 - 不能覆盖的切入点 - 参数类型不匹配
public abstract aspect GenericAspect<T> {
public abstract T createT(Object[] args);
abstract pointcut callMethod(Object[] args);
T around(Object[] args) : callMethod(args) {
return createT(args);
}
}
而且我想这个方面延伸到另外一个抽象方面只覆盖抽象切入点。就像下面的例子(其中foo是一个接口):
但是我有这样的编译错误:
can't override pointcut GenericAspect.callMethod(java.lang.Object[]) with pointcut FooAspect.callMethod(java.lang.Object[]) parameter don't match
我怎样才能解决这个问题呢?
谢谢,它为我工作。另一个可能的变体是用'Object [] args = thisJoinPoint.getArgs();' – EstevaoLuis
从around建议中获取args,但是由于需要遍历由'getArgs'返回的'Object []' 。在你的例子中,你可以通过Object [] methodArgs =(Object [])thisJoinPoint.getArgs()[0];'获得自己的'Object []'作为第一个方法参数。我更喜欢没有铸造的更安全的解决方案。它还具有将切入点匹配限制在真正具有一个'Object''参数的方法的优点。不使用'args()',而只使用'getArgs()'意味着if-else,迭代,加上大量的字节码在不需要的地方编织。 – kriegaex