我可以以某种方式将一个类与参数化构造函数混合在一起吗?
像这样的东西:
class RenderedWithTemplates {
def templates = []
RenderedWithTemplates(templates) { ... }
...
}
@Mixin(RenderedWithTemplates(show: "showAddress.gsp", add: "addAddress.gsp")
class Address { ... }
我从 2007 [0] 中找到了 mixin 提案,但是 GroovyDefaultMethods#mixin [1] 方法不支持参数化 mixin,@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