2012-04-29 62 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)

相关问题