这是有效的Java
使用中的int枚举模式程序是易碎的。 由于INT枚举的编译时间常数,它们被编译成使用它们的客户。
一些人能够解释为什么INT枚举模式被称为编译型常数,是什么意思由编译到客户端 ?
这里S'这样的恒定的例子:
public static final int APPLE_FUJI = 0;
这是有效的Java
使用中的int枚举模式程序是易碎的。 由于INT枚举的编译时间常数,它们被编译成使用它们的客户。
一些人能够解释为什么INT枚举模式被称为编译型常数,是什么意思由编译到客户端 ?
这里S'这样的恒定的例子:
public static final int APPLE_FUJI = 0;
假设你有两个文件:
Foo.java:
public class Foo
{
public static final int SOMETHING = 1;
}
Bar.java:
public class Bar
{
public static void main(String[] args)
{
System.out.println(Foo.SOMETHING);
}
}
编译他们两个,运行java Bar
,它会打印出1。
现在改变Foo.java使SOMETHING
是2,而只是重新编译Foo.java。 重新运行java Bar
,它仍然会打印1.常数值将被复制到每一段代码使用它,而不是要求从价值Foo
的执行时间。
在实践中, 如果你重新编译所有的任何时间有什么变化,这是没有问题的。
值“0”本身将被内置到.class
编译过程中的文件。 如果随后更改该值,你必须重新编译使用它,包括使用您的应用程序/库的任何客户端的代码一切 。
如果不这样做,你就不会得到一个警告,而是不正确的行为。
如果你的编译时间常数在你的代码仅用于那么它是不是一个问题,假设一个完整的清洁/构建周期。 如果你的代码,然后达到一个更广泛的受众那么这变得更加的问题。