Grails 如何获得groovy mixin的目标类?

Grails 如何获得groovy mixin的目标类?,grails,groovy,enums,internationalization,mixins,Grails,Groovy,Enums,Internationalization,Mixins,我尝试在Grails中执行以下操作: class I18nEnum implements MessageSourceResolvable { public Object[] getArguments() { [] as Object[] } public String[] getCodes() { [ this.class.canonicalName+'.'+name() ] } public String getDefaultMessage() { "?-" + nam

我尝试在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
}
my.package.MyDomainClass.MaritalStatus.SINGLE  = Single
my.package.MyDomainClass.MaritalStatus.MARRIED = Married
然后将MyDomainClass与scaffolding一起使用以生成HTML选择字段,并使选项在messages.properties中可翻译,如下所示:

class MyDomainClass {
    @Mixin(I18nEnum)
    public static enum MaritalStatus {
        SINGLE, MARRIED
    }
    MaritalStatus maritalStatus
}
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 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所需的方法。

混合不适用于枚举。可能对您有用:

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