Следующий код работает для меня (я не пробовал с журналом, но использовал онлайн-Groovy консоль):
import groovy.transform.Field
import groovy.transform.Canonical
@Canonical
class Person {
String name
int age
}
@Field person = new Person("John", 30)
println "Global $person"
testFunction()
private void testFunction() {
println "Inside method: $person"
}
Вывод:
Global Person(John, 30)
Inside method: Person(John, 30)
Поэтому убедитесь, что вы правильноимпортирует в первую очередь
Теперь стоит упомянуть, что groovy создает неявный класс, а аннотация Field изменяет область действия глобальной переменной и перемещает ее в поле этого неявного класса, так что person
и testFunction
оба будут принадлежать этому классу, и не будет проблем с доступом к полю из метода.