我有一个课我想要static final
个变量。
public static final Map<String, Long> ID_MAP;
我希望能够通过Spring注入地图。这不能用b / c它是static final
。我的替代方法是将其声明为static
并将Spring与setter一起使用。像
public void setIDMapSpring (long iDMapSpring){
ID_MAP = iDMapSpring;
然而,这意味着另一个类可以改变该值。有什么替代方案我可以尝试。我正在考虑将一个Singleton与Map作为final
字段,但我仍然想弄清楚如何将Map以及可能需要标记为final
的其他变量传递给{{1 }} 方法。而且,我很难找到最简单,最简单的解决方案。
答案 0 :(得分:3)
将地图设为一个字段并注入一个单例。
答案 1 :(得分:0)
如果你担心在Spring设置它之后更改值的外部类,你可以在你的类中集成一个标志,只允许字段设置一次。假设您将名为“CAN_SET_ID_MAP”的静态AtomicBoolean
初始化为true。然后,在地图的设置器中:
if (CAN_SET_ID_MAP.compareAndSet (true, false)) {
ID_MAP = iDMapSpring;
} else {
throw new IllegalStateException ("ID_MAP already set");
}
还有其他方法可以做到这一点。无论如何,您可能希望使用线程安全的保护形式。