0

我目前为这样的常量定义了一个类

public final class DataContainer{

    public static final String x1="a";    
    public static final String x2="b";
     ...
    public static final String xn="z";    

}

并通过像这样访问来使用这些:DataContainer.x1

但是现在我需要定义这个常量文件(DataContainer1& DataContainer2)的两个实现,并在运行时选择在整个应用程序中使用常量的两个实现类中的哪一个,而不需要从 .DataContainer1.x1DataContainer2.x1.

我怎样才能实现这样的设计?

4

1 回答 1

1

您可能应该远离static final常量的实现。

首先拥有静态/最终常量的主要优点是编译器在编译时已经可以访问这些值,因此可以执行各种优化。

但是由于您需要能够在运行时交换常量的实际值,所以无论如何这种优势都会消失。严格来说,人们可能会争辩说这些值不再是最严格意义上的常量,因为它们实际上是可变的。

我可能会选择一个非常简单和经典的 OO 构造,其中你有一个类似于地图的接口来访问值及其不同的实现。

public interface Constants {
    public String get(String value);
}

(事实上​​,切换到 ajava.util.Map或 tojava.util.Properties可能已经做了你想要的。)

当然,您可能仍希望将该接口的各个实现中的值定义为static final.

如果您绝对喜欢静态访问,您可以使用工厂模式在运行时检索常量的实际实例。这也将完全让您在您的同事中看起来像一个经过认证的 Java 大师 ;-)

于 2012-11-01T08:21:35.913 回答