有没有办法在Groovy中对mixin进行参数化?

时间:2012-10-06 08:25:07

标签: groovy mixins

我能以某种方式将一个类与参数化构造函数混合在一起吗?

这样的事情:

class RenderedWithTemplates {
   def templates = []

   RenderedWithTemplates(templates) { ... }

   ...

}

@Mixin(RenderedWithTemplates(show: "showAddress.gsp", add: "addAddress.gsp")
class Address { ... }

1 个答案:

答案 0 :(得分:0)

我发现了2007年的混合提案[0],但是GroovyDefaultMethods#mixin [1]方法不支持参数化mixins,也没有@Mixin。

据我所知,从上面的代码示例中,您需要找到一种方法来混合与您的(域)类绑定的GSP视图信息。对于这种情况,另一种(并且稍微更加粗略;))方法是将RenderedWithTemplates作为注释实现,其中包含一个包含GSP视图信息的闭包参数:

import java.lang.annotation.*

@Retention(RetentionPolicy.RUNTIME)
@interface RenderedWithTemplates {
    Class value()
}

@RenderedWithTemplates({ [show: "showAddress.gsp", add: "addAddress.gsp"] }) 
class Address {}

// shows how to read the map with all the GSP infos

def templateInfo = Address.getAnnotation(RenderedWithTemplates)
def gspMap = templateInfo.value().newInstance(this, this).call()

[0] http://docs.codehaus.org/display/GroovyJSR/Mixins

[1] http://groovy.codehaus.org/api/org/codehaus/groovy/runtime/DefaultGroovyMethods.html