如何声明一个具有每个对象类的返回类型的类型间方法?

时间:2013-08-26 03:16:52

标签: java aspectj aop

在我的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}在适用的地方?

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
    }
}

使用泛型的乐趣!我想,答案是直截了当的,但请告诉我这是否会让你感到困惑。