可能会在某处讨论,但我找不到它。
我需要在类静态初始化块中加载类属性(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来自我的所有有意义的答案......不要忘记逐一检查操作: - )。
答案 0 :(得分:3)
properties
字段必须为static
。在load
之前,您需要使用proeprties = new Properties()
初始化静态变量,之后您可以调用load
答案 1 :(得分:1)
将属性声明为static并初始化
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
答案 2 :(得分: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.");
}
}
}