2013-08-26 54 views
1

在我的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()或類似的東西,即在適用時注入MyClassOneMyClassTwo

+0

所以你想在getMyself()中返回MyClassOne或MyClassTwo的實例? –

+0

嗯,是的......正如我寫的,我不知道代碼注入是如何工作的,但我的目標是當從MyClassOne的一個實例調用getMyself()時返回一個MyClassOne實例,當從該類的一個實例中調用MyClassTwo時。 – EdMelo

+0

PS:我知道我可以返回一個通用類型(' T ...'),但這不完全是我想要的。 – EdMelo

回答

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

樂趣仿製藥!我認爲答案是直截了當的,但讓我知道這是否讓你感到困惑。

相關問題