【发布时间】:2014-01-04 07:54:02
【问题描述】:
假设我有一个像下面这样的类
public class Foo
{
public static final String FIELD_1 = Env.getProperties("one");
public static final String FIELD_2 = Env.getProperties("one");
//....
public static final String FIELD_N = Env.getProperties("n");
}
显然,当我们第一次引用Foo 时,所有FIELD_* 都会被填充。
假设我的Env.getProperties(String) 不是纯粹的函数式(即,它可以返回不同的值。如何?这里不重要)
如何强制“重新加载”类 Foo,以便重新执行所有类初始化代码(这样我可以为静态字段设置不同的值)?
(由于各种原因,我无法将这些字段设为非静态或非最终字段。 所以请不要建议像让 Foo 成为接口这样的解决方案,并覆盖各种 getter 方法)
谢谢
【问题讨论】:
-
我的错,我没有注意到 Final 关键字。答案已删除。
-
如果我没听错的话,你想要一些状态的快照吗?
-
嗯,不,对不起。我希望能够更改这些字段的值,以便调用者可以看到新值。
-
我认为如果我们了解上下文,我们会更容易为您提供帮助。我很抱歉这么说,但你会得到的建议不会使用静态。 ;)
-
所以也许没有你会接受的解决方案。
标签: java dynamic-class-loaders