gpt4 book ai didi

java - 在 Tomcat 中替换类后常量不会改变

转载 作者:搜寻专家 更新时间:2023-10-31 19:35:44 25 4
gpt4 key购买 nike

我已经在 Tomcat 6 上部署了一个应用程序,部署后我想对我的常量类做一些更改,我只将常量类(.class 文件)上传到分解的 war 文件中。

即使在我多次重启服务器后,我所做的更改也不会显示。

我所更改的只是常量中的一些字符串。除了再次上传 war 文件,你建议我做什么?

最佳答案

将不得不重新编译所有引用那些String常量的类。

请注意,原始类型或 String 类型的 static final 字段用 compile time constant value 初始化(所谓的 constant variable )在其他类中使用时将被内联。

换句话说,如果你有这些类:

public class Constants {
public static final int FOO = 42;
}

public class Bar {
public void frobnicate() {
System.out.println(Constants.FOO);
}
}

然后在编译时FOO的值会被编译到Bar.class文件中,这意味着 Bar 在运行时不再引用 Constants!

这也意味着 FOO 的任何更改都不会影响 Bar 直到您重新编译 Bar 使用新的 Constants.class

此效果在 JLS §13.4.9 final Fields and Constants 中进行了详细讨论。 .

将来避免此问题的一种方法是确保您的“常量”不会被编译器解释为常​​量变量。一种方法是通过静态初始化 block 将值的赋值从初始化器转移到简单赋值:

public class Constants {
public static final int FOO;

static {
FOO = 42;
}
}

关于java - 在 Tomcat 中替换类后常量不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5617270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com