-->

这是什么意思是说,INT枚举模式是编译时间常数?(What does it mean to say

2019-06-26 17:22发布

这是有效的Java

使用中的int枚举模式程序是易碎的。 由于INT枚举的编译时间常数,它们被编译成使用它们的客户。

一些人能够解释为什么INT枚举模式被称为编译型常数,是什么意思由编译到客户端

这里S'这样的恒定的例子:

public static final int APPLE_FUJI = 0;

Answer 1:

假设你有两个文件:

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的执行时间。

在实践中, 如果你重新编译所有的任何时间有什么变化,这是没有问题的。



Answer 2:

值“0”本身将被内置到.class编译过程中的文件。 如果随后更改该值,你必须重新编译使用它,包括使用您的应用程序/库的任何客户端的代码一切

如果不这样做,你就不会得到一个警告,而是不正确的行为。

如果你的编译时间常数在你的代码仅用于那么它是不是一个问题,假设一个完整的清洁/构建周期。 如果你的代码,然后达到一个更广泛的受众那么这变得更加的问题。



文章来源: What does it mean to say that int enum patterns are compile-time constants?