Использование переменной @Field в скрипте Groovy - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть скрипт с глобальной переменной в моем скрипте Groovy. У меня проблема с использованием его внутри функции.Могу ли я узнать причину или правильный путь?Я собираюсь использовать это для регистратора.Другие примитивные типы данных могут быть доступны, но я не могу.

@Field def log = Logger.getLogger("NameOfLogger")

log.info("TEST")

testFunction()

private void testFunction() {
 //cannot use the log variable here
}

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Следующий код работает для меня (я не пробовал с журналом, но использовал онлайн-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 оба будут принадлежать этому классу, и не будет проблем с доступом к полю из метода.

0 голосов
/ 26 сентября 2019

Теперь я знаю причину.Это потому, что я объявил это как def Но я до сих пор не знаю реальной причины, по которой def нельзя использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...