如何使用groovy mixin添加静态方法

pra*_*bha 5 methods groovy static mixins

我想使用 groovy 的 mixin 功能将方法导入为“类(静态)方法”而不是实例方法。当我使用 mixin 时,即使我的 mixin 类中有一个静态方法,它也会转换为目标类中的实例方法。我希望导入的方法成为类(静态)方法。有没有好的方法可以做到这一点?

Dón*_*nal 3

我不知道有什么方法可以使用 mixins 将静态方法添加到类中,但是您可以通过属性将静态方法添加到类中metaClass.static。下面是一个添加静态方法的示例,fqn()该方法打印类的完全限定名称

Class.metaClass.static.fqn = { delegate.name }
assert String.fqn() == "java.lang.String"
Run Code Online (Sandbox Code Playgroud)

如果你想添加fqn()(和其他静态方法)到多个类(例如列表、文件、扫描仪),你可以这样做

def staticMethods = [fqn: {delegate.name}, fqnUpper: {delegate.name.toUpperCase()}]    

[List, File, Scanner].each { clazz ->

    staticMethods.each{methodName, methodImpl ->
        clazz.metaClass.static[methodName] = methodImpl
    }
}
Run Code Online (Sandbox Code Playgroud)