Использование статических и финальных модификаторов в Groovy - PullRequest
5 голосов
/ 19 марта 2012
class GroovyHello {
    public String execute() {
             println("Test String is " + TEST)
    }

private static final String TEST = "Test"
}

Вывод для приведенного выше фрагмента в Groovy V.1.6.3:

Тестовая строка - это тест

Выходные данные для вышеуказанного фрагмента в Groovy V.1.8.6:

Тестовая строка равна нулю

Приведенный выше фрагмент успешно печатает строку, если я изменяю объявление, чтобы оно было статическим (private static String TEST = "Test") или конечным (private final String TEST = "Test"), но не обоими.

Ответы [ 2 ]

2 голосов
/ 22 апреля 2012

Моя теория, что поскольку объект статический и приватный, то у вас нет к нему доступа, так как это отдельный объект.Однако, если он просто приватный, ваш метод является частью объекта и имеет к нему доступ.Если оно просто статическое, то у вас есть доступ к полю - по умолчанию это общедоступное поле.

0 голосов
/ 06 июля 2012

Мы заметили это, когда у нас был Groovy ++ в пути к классам времени выполнения из других транзитивных зависимостей. Если это так, вы можете посмотреть на это.

...