继承如何在groovy中用于闭包?有什么特别需要注意的吗?我的应用程序是扩展一个插件控制器,如果有任何更新,我需要单独留下。
答案 0 :(得分:7)
闭包继承没有多大意义(无论如何我们倾向于使用它们)。实际上,闭包是Closure
类的一个实例。如果我们创建了Closure
的子类,那么我们可以将它们子类化,但我们不会。例如,在控制器中,我们将操作定义为内联实例,例如
def list = {
...
}
这些被视为方法,因为我们可以调用list()
,但这只是list.call()
的语法糖,因为call()
是Closure
类的实例方法。
在Grails 2.0中,创建控制器操作的首选方法是使用方法,尽管仍然支持闭包以实现向后兼容性。这种切换的主要原因之一是支持过载和覆盖,这对于内联闭合是不可能的(或至少是实际的)。您可以在子类中定义一个与基类实例同名的闭包实例,但是您不能调用super.list()
,因为它会导致StackOverflowError