如何在java中正确创建带有静态变量的配置类?

时间:2014-02-28 17:47:13

标签: java static

我创建了SomeConfig来存储静态数据。然而,我试图理解女巫选择更好(或两者都没有)

在我上课SomeConfig之前写成:

public class SomeConfig {

    private static int mValue = 8;
    private static String mString = "some String";

    public static int getValue() {
        return mValue;
    }

    public static void setValue(int value) {
      mValue = value;
    }

    public static String getTheString() {
        return mString;
    }

    public static void setValue(String theString) {
       mString = theString;
    }
}

现在我将其更改为:

 public class SomeConfig {
    private static SomeConfig mSomeConfig = new SomeConfig();

    private int mValue = 8;
    private String mString = "some String";

    public static int getValue() {
        return mSomeConfig.mValue;
    }

    public static void setValue(int value) {
        mSomeConfig.mValue = value;
    }

    public static String getTheString() {
        return mSomeConfig.mString;
    }

    public static void setValue(String theString) {
        mSomeConfig.mString = theString;
    }
}

通常我将私有变量更改为非静态变量,但API保持不变。

我发布的两个选项之间有什么区别?

谢谢,

4 个答案:

答案 0 :(得分:1)

如果您只想在应用程序中存在SomeConfig的一个实例,那么您可能希望将其设为Singleton类。请参阅此链接:link

您的第二个选项似乎最接近Singleton,您只需要将Default构造函数设为Private,以确保没有其他类可以创建SomeConfig的另一个实例。

答案 1 :(得分:1)

根据我的理解,静态变量是类变量,并且不需要任何对象来调用或赋值。这些静态变量的值在类中保持相同。一旦分配了值,所有对象都可以访问该值

希望它会对你有所帮助。

答案 2 :(得分:1)

一般来说,我认为避免使用静态变量和方法是一种很好的做法,除非确实需要(我猜静态的常用是“实用”类型方法,或常量等)。如果您不想多次实例化该类,或者想要确保配置的单个实例,我认为将其实现为单例将是更好的方法。

答案 3 :(得分:0)

我不建议将这两者中的任何一个用于配置目的。

这两者之间的区别只是一个使用实例来保存值,另一个使用静态变量。

您可能会考虑使用一个配置类,在初始化期间使用ResourceBundle从.properties文件加载值。