Недопустимая ошибка прямой ссылки для статических полей final

Я пытаюсь скомпилировать класс Java, которыйjavac отклоняет снезаконная прямая ссылка ошибка, при которой ссылка на оскорбление является лексическойпосле ссылочное поле. Следующий класс урезан настолько, насколько это возможно, показывая то же поведение:

java.util.concurrent.Callable и много использованияObject просто используются в качестве заполнителей для удаления ненужных фрагментов кода.

public class Test {
    static final Object foo = method(new java.util.concurrent.Callable<Object>() {
        @Override
        public Object call() throws Exception {
            return bar;
        }
    });

    static final Object bar = foo;

    static Object method(Object binder) {
        return null;
    }
}

Когда скомпилировано с использованиемjavac Test.java, javac печатает следующее сообщение об ошибке:

Test.java:9: illegal forward reference
    static final Object bar = foo;
                              ^

Так что компилятор жалуется наbarобъявление ссылкиfoo покаfoo должно быть в объемеbarдекларация Но как только ссылкаbar вfooобъявление удалено, например изменив строку 5 изreturn bar; вreturn null;, класс принимается компилятором.

Как это можно объяснить? Мое пониманиевперед как смысллексически после неправильно или это какой-то особый случай, о котором я не знаю?

Ответы на вопрос(2)

Ваш ответ на вопрос