【发布时间】:2016-09-26 16:21:15
【问题描述】:
我正在寻找一种在 Java 中维护 真正全局 变量的方法,该变量对整个 JVM 实例都有效。
如果我只是在某处使用了static 字段,it will fail 如果包含该字段的类被不同的类加载器多次加载。
我可以想到一些讨厌的方法来解决这个问题,例如只使用 JDK 标准类(通常应该始终由同一个类加载器加载),或者要求自定义 MBean 保持全局状态,但这些看起来像是 hack对我来说。
免责声明:我知道全局状态是不好的,是的,我会尽可能避免它。承诺。
【问题讨论】:
-
如果没有别的,那么出于我自己的好奇心,请解释一下用例。
-
使用
enum。但是请注意,您想要的实际上是“un OO”。 -
@BoristheSpider 枚举解决方案与静态字段解决方案具有完全相同的问题。
-
如果您的问题与多个类加载器有关,那么您需要由系统类加载器或其他共享类加载器加载全局对象。如何设置取决于您运行应用程序的方式,例如在 Tomcat 中,
CATALINA_BASE/lib文件夹中的任何 jar 文件都会添加到共享类加载器中。一旦你的类被正确的类加载器加载,static字段就会做你想做的事情。
标签: java global-variables classloader