【发布时间】:2010-11-27 06:09:09
【问题描述】:
考虑这种情况:
public Class1 {
public static final String ONE = "ABC";
public static final String TWO = "DEF";
}
public Class2 {
public void someMethod() {
System.out.println(Class1.ONE + Class1.TWO);
}
}
通常您希望编译器内联 ONE 和 TWO 常量。但是,这种行为是否得到保证?您能否在运行时部署 Class2 而在类路径中没有 Class1,并期望它不管编译器如何都能工作,或者这是一个可选的编译器优化?
编辑:到底为什么要这样做?好吧,我有一个常量,它将在应用程序的两端(通过 RMI 的客户端和服务器)之间共享,在这种特殊情况下,将常量放在只能位于该分隔线一侧的类上会非常方便(因为它在逻辑上是拥有该常量值的那个)而不是仅仅因为它需要由代码的双方共享而将它放在任意常量类中。在编译时它是一组源文件,但在构建时它是按包划分的。
【问题讨论】: