运行时未反映常量值[已关闭]

问题描述 投票:0回答:2

假设你编译了以下两个类。第一个代表客户;第二个是图书馆课。

public class Test{
    public static void main(String[] args) {
        System.out.println(Lib.FIRST + " " +
                           Lib.SECOND + " " +
                           Lib.THIRD);
    }
}


public class Lib{
    private Lib() { }; // Uninstantiable
    public static final String FIRST = "the";
    public static final String SECOND = null;
    public static final String THIRD = "set";
}

打印:

{空集}

现在假设您按如下方式修改库类并重新编译它,但不重新编译客户端程序:

public class Lib{
    private Lib() { }; // Uninstantiable
    public static final String FIRST = "physics";
    public static final String SECOND = "chemistry";
    public static final String THIRD = "biology";
}

打印:

{化学组}

为什么

SECOND
值改变了,但
FIRST
THIRD
没有改变?

java constants
2个回答
7
投票

这是一个已知的警告 - 当您编译客户端程序时,常量会被内联,因此您也必须重新编译它。

另请参阅:


3
投票

值(即“the”和“set”)是内联的,而编译器在编译时不会内联

null
。为了避免类似的情况,您可以使用访问器方法。

© www.soinside.com 2019 - 2024. All rights reserved.