Я не знаю ни одного способа добавления статических методов в класс с помощью 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, File, Scanner].each { clazz ->
staticMethods.each{methodName, methodImpl ->
clazz.metaClass.static[methodName] = methodImpl
}
}