IBM Java V9静态字段引用复制到类文件中
我在IBMWebSphereAppServer7.0上部署了两个位于不同JAR中的Java类(虽然有点旧,但我不得不在项目中使用它) 第一个类有一个静态的final字段: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.
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版本。创建两个类,其中一个使用另一个的静态最终常量并运行,然后仅使用该常量重新编译该类,然后查看发生了什么。或者看看字节码
如果您希望能够更改常量,请使用方法公开它,并在运行时支付少量的性能成本。可能重复的。