我想使用groovy的mixin功能将方法导入为“类(静态)方法”而不是实例方法.当我使用mixin时,即使我在我的mixin类中有一个静态方法,它也会转换为目标类中的实例方法.我希望导入的方法是一个类(静态)方法.有一个很好的方法吗?
解决方法
我不知道使用mixins向类添加静态方法的任何方法,但您可以通过MetaClass.static属性向类添加静态方法.这是一个添加静态fqn()方法的示例,该方法打印类的完全限定名称
Class.MetaClass.static.fqn = { delegate.name } assert String.fqn() == "java.lang.String"
如果你想将fqn()(和其他静态方法)添加到几个类(例如List,File,Scanner),你可以做类似的事情
def staticMethods = [fqn: {delegate.name},fqnUpper: {delegate.name.toUpperCase()}] [List,Scanner].each { clazz -> staticMethods.each{methodName,methodImpl -> clazz.MetaClass.static[methodName] = methodImpl } }