如何使用带有groovy闭包的构造函数参数来实例化Java抽象类

时间:2012-04-29 09:02:07

标签: java groovy abstract-class

我试图从我的Groovy代码中实例化一个Java抽象类。考虑以下Java抽象类(从类中删除非相关处理):

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

我可以通过这种方式轻松地在Groovy中实例化它,对answerMe()的调用将触发正确的输出:

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

现在,如果我修改StackOverflow类,在构造函数中添加一个String参数,如下所示:

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

我真的不知道如何实例化我的对象,我尝试了很多东西,但我似乎无法找到正确的语法,有人有任何线索吗?

2 个答案:

答案 0 :(得分:3)

仅仅是为了记录,并且要明确措辞:在所有这些场景中,你没有实例化一个抽象类。

抽象类是永远无法实例化的类。

您正在实例化一个扩展抽象类的具体匿名类。乙 - )

答案 1 :(得分:2)

您可以使用经典Java样式实例化它:

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