Groovy类中的方法别名

Groovy类中的方法别名,groovy,Groovy,我将把groovy API国际化 最后一节课(如字符串) 但是,这将创建额外的闭包。难道没有任何方法可以将alias方法与另一个方法结合起来吗 大概是这样的: String.metaClass.вСтроку = String.metaClass.&toString 您可以像这样使用@Category转换 @Category(String) class StringInternationalization { String вСтроку() { this.to

我将把groovy API国际化

最后一节课(如字符串)

但是,这将创建额外的闭包。难道没有任何方法可以将
alias
方法与另一个方法结合起来吗

大概是这样的:

String.metaClass.вСтроку = String.metaClass.&toString

您可以像这样使用@Category转换

@Category(String) class StringInternationalization {
    String вСтроку() {
        this.toString()
    }

    int длина() {
        this.length()
    }
}

class ApplyMixin {
    static {
        String.mixin(StringInternationalization)
        final helloString = "Привет мир!"
        println helloString.вСтроку()
        assert helloString.длина() == helloString.length()
    }
}

new Main()
这将为每个本地化类创建一个Category类,并为应用所有mixin转换(注册所有方法)创建一个Category类。这也应该比单个闭包更快


更多阅读:

创建额外闭包有什么问题?将创建额外的java.class。如果我要将所有groovy API国际化,这不是最佳选择。谢谢。我会分析你的建议,然后再给你回复。扩展也是一种很好的方法,因为它们不需要
静态{}
@Category(String) class StringInternationalization {
    String вСтроку() {
        this.toString()
    }

    int длина() {
        this.length()
    }
}

class ApplyMixin {
    static {
        String.mixin(StringInternationalization)
        final helloString = "Привет мир!"
        println helloString.вСтроку()
        assert helloString.длина() == helloString.length()
    }
}

new Main()