0

可能在某处讨论过,但我没找到。

我需要java.util.Properties在类静态初始化块中加载类属性()。这是为了即使没有创建对象也可以访问某些类的常规选项。为此,我需要适当Class的对象。但是当然,对此类对象的访问会在对象上失败null。像这样的东西。

Class Name {

    private static Properties properties;

    static {
        Name.properties = new Properties();
        Name.properties.load(Name.class.getResourceAsStream("Name.properties"));
    }

}

知道如何处理这种情况吗?

更新:
它是资源名称(在我的情况下应该是“/Name.properties”)。其他一切都很好。为我提供的所有有意义的答案+1,并且......不要忘记一一检查操作:-)。

4

3 回答 3

3

properties字段必须是static. 在load您需要初始化静态变量之前proeprties = new Properties(),您可以调用load

于 2013-11-06T11:36:32.823 回答
1

将属性声明为静态并初始化

static Properties properties;

或者

static Properties properties = new Properties();

和静态块应该是

static {
    try {
        properties = new Properties(); //if you have not initialize it already
        Name.properties.load(Name.class.getResourceAsStream("Name.properties"));
    } catch (IOException e) {
        throw new ExceptionInInitializerError(e); //or some message in constructor
    }
}

您需要在加载属性文件时捕获 IOException

于 2013-11-06T11:37:39.193 回答
0

基于所有建议的最终代码如下:

Class Name {

    private static final Properties properties = new Properties();

    static {
        try {
            InputStream stream = Name.class.getResourceAsStream("/Name.properties");
            if (stream == null) {
                throw new ExceptionInInitializerError("Failed to open properties stream.");
            }
            Name.properties.load(stream);
        } catch (IOException e) {
            throw new ExceptionInInitializerError("Failed to load properties.");
        }
    }
}
于 2013-11-06T12:02:22.607 回答