在我的AspectJ项目中,我有一个如下代码:
public aspect MyAspect {
public Object MyInterface.getMyself() {
return this;
}
}
public interface MyInterface {
}
public class MyClassOne implements MyInterface {}
public class MyClassTwo implements MyInterface {}
那么,AspectJ如何在类型间声明中注入代码?另外,有没有办法,而不是将MyInterface.getMyself()
声明为Object
,声明为this.getClass()
或类似的东西,即注入MyClassOne
和{{1}在适用的地方?
答案 0 :(得分:1)
试试这个:
aspect MyAspect {
public S MyInterface<S>.getMyself() {
return (S) this;
}
}
interface MyInterface<T extends MyInterface<T>> {
}
class MyClassOne implements MyInterface<MyClassOne> {}
class MyClassTwo implements MyInterface<MyClassTwo> {}
class Main {
public static void main(String[] args) {
MyClassOne aClassOne = new MyClassOne().getMyself();
MyClassTwo aClassTwo = new MyClassTwo().getMyself();
MyClassOne errorClassOne = new MyClassTwo().getMyself(); // compile error
MyClassTwo errorClassTwo = new MyClassOne().getMyself(); // compile error
}
}
使用泛型的乐趣!我想,答案是直截了当的,但请告诉我这是否会让你感到困惑。