Я обнаружил, что когда константа (статическая окончательная, инициализированная во время компиляции) объявляется в одном проекте, ссылки на нее в другом проекте заменяются литералом при компиляции.Избегание замены ссылки константы с литералом при компиляции
Кажется, что единственный способ избежать этого и ссылок относится к постоянному полю, а не буквальное должны объявить константу в классе (в отличие от интерфейса) и опустить «окончательной», например:
public class MyClass {
public static String MY_CONSTANT = "The constant value";
}
К сожалению, я закодировал интерфейс, полный констант, прежде чем я понял это, и теперь для изменения константы мы должны идентифицировать все проекты, которые ссылаются на нее, и перекомпилировать их. Боюсь, что что-то проскочит.
Кроме того, константа без «окончательного» модификатора не является постоянной, не так ли?
Есть ли опция компиляции, которая может подавлять замену постоянных ссылок литералами?
Вы обнаружили отверстие в своих знаниях о java. И для записи: да, это как-то проблема в более крупных настройках **, но ** это хорошо известная проблема. Любая разумная ** система сборки ** должна иметь возможность справиться с этим; путем ** понимания ** зависимостей и необходимости перекомпилировать все классы, которые необходимо ... – GhostCat
Мы сделали ту же ошибку не так давно. Мы изменили интерфейс, чтобы иметь getter-Methods. и класс внедрения. Пожалуйста, посмотрите, добавьте «Эффективная Java» от Джошуа Блоха. Пункт 19: «Использовать интерфейсы только для определения типов» –