2012-04-29 61 views
5

我想從我的Groovy代碼實例化Java抽象類。考慮下面的Java抽象類(非相關處理從類剝離出來):如何實例化具有常規閉包的構造函數參數的Java抽象類

public abstract class StackOverflow{ 
    public abstract String answerMe(); 
} 

我可以這樣輕鬆地實例化它在Groovy和調用answerMe()將觸發正確的輸出:

StackOverflow stack = [answerMe : { "Answer" }] as StackOverflow 

現在,如果我修改StackOverflow類中添加一個字符串參數的構造是這樣的:

public abstract class StackOverflowStr{ 
    public StackOverflowStr(String s){} 
    public abstract String answerMe(); 
} 

我真的不硝酸鉀如何實例化我的對象,我嘗試了很多東西,但似乎無法找到正確的語法,是否有人得到任何線索?

回答

2

可以在經典的Java風格實例吧:

StackOverflowStr stack = new StackOverflowStr("javaish"){ 
    String answerMe() {"answer"} 
} 
+0

謝謝我這樣做,但我想知道如果我可以像第一個例子中的封閉。 – 2012-04-29 09:43:58

+0

@CedricGatay不,如果沒有默認的構造函數,你不能創建一個代理對象,而不去做Andrea說的 – 2012-04-30 08:20:28

3

只是爲了記錄在案,並要在措辭明確:在所有這些場景中,你不能實例化一個抽象類。

抽象類是永遠不能實例化的類。

您正在實例化一個擴展抽象類的具體匿名類。 B)

相關問題