您将不得不重新编译引用这些String常量的所有类.
请注意,当在其他类中使用时,将使用编译时常量值(所谓的常量变量)初始化static final的基本类型或类型的字段进行内联.String
换句话说,如果你有这些类:
public class Constants {
public static final int FOO = 42;
}
public class Bar {
public void frobnicate() {
System.out.println(Constants.FOO);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在编译时将值FOO编译到.class文件中Bar,这意味着在运行时Bar不再引用Constants!
这也意味着FOO在您使用new 重新编译Bar 之前,任何更改都不会产生任何影响.BarConstants.class
在JLS§13.4.9 final字段和常量中详细讨论了这种影响.
将来避免此问题的一种方法是确保编译器不会将"常量"解释为常量变量.一种方法是通过静态初始化程序块将值从初始化程序移动到简单赋值:
public class Constants {
public static final int FOO;
static {
FOO = 42;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1219 次 |
| 最近记录: |