Ссылка на статическое поле IBM Java V9 скопирована в файл класса - PullRequest
0 голосов
/ 06 июля 2018

У меня есть два Java-класса, расположенных в разных jar-файлах, развернутых на IBM Websphere App Server 7.0 (он немного устарел, но я вынужден использовать его в проекте).

Первый класс имеет статическое конечное поле:

public class TFFVERSION {
    public static final String ACTUAL_VERSION = "8.3";
}

Второй использует поле в нестатическом методе:

xslTemplate = String.format("%s_v%s", xslTemplate, TFFVERSION.ACTUAL_VERSION);

Я пытаюсь понять, почему компилятор помещает копию константы 8.3 в вызов String.format? Это делает невозможным просто изменить первый класс без перекомпиляции и повторного развертывания второго класса.

Это своего рода оптимизация или ошибка в IBM Java V9?

Здесь я открыл файлы классов в текстовом редакторе, показывая проблему (изображение кликабельно для лучшего разрешения): enter image description here

Однако декомпиляторы Java показывают правильный вызов статического поля. Во втором классе нет других 8.3 констант.

1 Ответ

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

Обычно это работает, это делается с помощью javac, а не с помощью Java-версии IBM. Создайте два класса, где один использует статическую конечную константу из другого, и запустите, затем перекомпилируйте только класс с константой и посмотрите, что произойдет. Или посмотрите на байтовые коды.

Если вы хотите изменить константу вниз по линии, предоставьте ее методом и заплатите небольшую цену производительности во время выполнения.

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