IBM Java V9静态字段引用复制到类文件中

时间:2018-07-06 13:03:34

标签: java websphere

我在位于IBM Websphere App Server 7.0上的不同jar中有两个Java类(它有些旧,但是我不得不在项目中使用它)。

第一类具有一个静态的final字段:

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中的一种优化还是Bug?

在这里,我已经在显示问题的文本编辑器中打开了类文件(可单击图像以获得更好的分辨率): enter image description here

Java反编译器可显示正确的静态字段调用。第二类中没有其他8.3常量。

1 个答案:

答案 0 :(得分:2)

这通常是这样工作的,它是由javac而不是由IBM的Java版本完成的。创建两个类,其中一个使用另一个的静态最终常量并运行,然后仅重新编译带有该常量的类,然后看看会发生什么。或者看看字节码。

如果希望能够在一行中更改常量,请使用一种方法公开该常量,并在运行时支付少量的性能开销。