Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IBM Java V9静态字段引用复制到类文件中_Java_Websphere - Fatal编程技术网

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

IBM Java V9静态字段引用复制到类文件中,java,websphere,Java,Websphere,我在IBMWebSphereAppServer7.0上部署了两个位于不同JAR中的Java类(虽然有点旧,但我不得不在项目中使用它) 第一个类有一个静态的final字段: public class TFFVERSION { public static final String ACTUAL_VERSION = "8.3"; } 第二种方法使用非静态方法中的字段: xslTemplate = String.format("%s_v%s", xslTemplate, TFFVERSION.

我在IBMWebSphereAppServer7.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中的错误?

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


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

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

如果您希望能够更改常量,请使用方法公开它,并在运行时支付少量的性能成本。

可能重复的。