Чтобы решить центральный вопрос об окончательном объекте, я думаю, что это предложение из спецификации более актуально:
Определение постоянного значения имеет форму final val x = e, где e является постоянным выражением (§6.24). Последний модификатор должен присутствовать, и аннотация типа типа не может быть задана. Ссылки на постоянное значение x сами рассматриваются как постоянные выражения; в сгенерированном коде они заменяются правой частью e.
blockquote>. Значение:
- Аннотации типа не могут быть заданы
- Выражение e используется в сгенерированном коде (моим чтением, как исходным неоцененным постоянным выражением)
Мне кажется, что компилятор требуется спецификацией для использования этих больше похоже на замену макросов, а не на значения, которые оцениваются на месте во время компиляции, что может повлиять на результат выполнения кода.
Я думаю, что особенно интересно, что аннотация типа типа не может быть задана.
Это, я думаю, указывает на наш окончательный ответ, хотя я не могу придумать пример, показывающий разницу во времени для этих требований. Фактически, в моем интерпретаторе 2.9.2 я даже не получаю принудительное выполнение первого правила.