2

どういうわけか、パラメーター化されたコンストラクターを使用してクラスをミックスインできますか?

このようなもの:

class RenderedWithTemplates {
   def templates = []

   RenderedWithTemplates(templates) { ... }

   ...

}

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

1 に答える 1

0

2007 年の mixin 提案 [0] を見つけましたが、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

于 2012-10-30T22:51:49.473 に答える