【问题标题】:How to get the target class of a groovy mixin?如何获得 groovy mixin 的目标类?
【发布时间】:2013-09-07 18:39:01
【问题描述】:

我正在尝试在 Grails 中执行以下操作:

class I18nEnum implements MessageSourceResolvable {
    public Object[] getArguments() { [] as Object[] }
    public String[] getCodes() { [ this.class.canonicalName+'.'+name() ] }
    public String getDefaultMessage() { "?-" + name() }
}

然后像这样使用这个类:

class MyDomainClass {
    @Mixin(I18nEnum)
    public static enum MaritalStatus {
        SINGLE, MARRIED
    }
    MaritalStatus maritalStatus
}

然后 MyDomainClass 与脚手架一起使用以生成 HTML 选择字段,并在 messages.properties 中使选项可翻译,如下所示:

my.package.MyDomainClass.MaritalStatus.SINGLE  = Single
my.package.MyDomainClass.MaritalStatus.MARRIED = Married

但我找不到获取目标类的名称(my.package.MyDomainClass.MaritalStatus)的方法,而是获得了mixin 类 (my.package.I18nEnum@1dd658e9)

如何获得 groovy mixin 的目标类?

有没有办法做这样的事情?

    public String[] getCodes() { [ this.targetClass.canonicalName+'.'+name() ] }

还是这样?

    public String[] getCodes() { [ this.mixinTargetClass.canonicalName+'.'+name() ] }

注意:目前,我使这个枚举国际化功能发挥作用的唯一方法是复制粘贴每个应用程序中定义的枚举类:

public static enum MaritalStatus implements MessageSourceResolvable {
    SINGLE, MARRIED
    public Object[] getArguments() { [] as Object[] }
    public String[] getCodes() { [ this.class.canonicalName+'.'+name() ] }
    public String getDefaultMessage() { name() }
}
MaritalStatus maritalStatus

但我想不为每个枚举重复相同的代码,而只是混合实现MessageSourceResolvable所需的方法。 p>

【问题讨论】:

    标签: grails groovy enums internationalization mixins


    【解决方案1】:

    Mixins 不适用于枚举。可能对你有用:

    class Mix {
        def enumClazz
        Mix(def clz) { enumClazz = clz }
        def getCode() { println "---> ${enumClazz.name()}"}
    }
    
    
    enum MaritalStatus {
        SINGLE, MARRIED    
    
        @Delegate Mix mixClz = new Mix(this)
    }
    
    MaritalStatus.MARRIED.code
    

    【讨论】:

      猜你喜欢
      • 2011-07-02
      • 2010-09-30
      • 2011-11-06
      • 2011-01-30
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多