【发布时间】:2011-03-02 23:25:25
【问题描述】:
我想知道使用这样的结构是否可靠:
private static final Map<String, String> engMessages;
private static final Map<String, String> rusMessages;
static {
engMessages = new HashMap<String, String> () {{
put ("msgname", "value");
}};
rusMessages = new HashMap<String, String> () {{
put ("msgname", "значение");
}};
}
private static Map<String, String> msgSource;
static {
msgSource = engMessages;
}
public static String msg (String msgName) {
return msgSource.get (msgName);
}
是否有可能我会得到NullPointerException,因为msgSource 初始化块将在初始化engMessages 的块之前执行?
(关于为什么我不在上面的 init.block 末尾做 msgSource 初始化:只是口味问题;如果描述的构造不可靠,我会这样做)
【问题讨论】:
-
我认为有比这更好的国际化方法。不过,我没有推荐这些方法的专业知识,但我认为这与将源代码之外的字符串外部化(以使非程序员翻译人员更容易工作)和使用各种机制有关已经为国际化而设计,而不是像这样管理自己的地图。
-
@polygenelubricants:部分同意。但我有 3 个原因:1)这对我来说是最简单/最快的方式; 2)这不是一个真正的应用程序,我将其作为我学位工作的一部分; 3) 如果有必要,仍然可以在静态初始化器中解析属性文件(但它不会)。
标签: java static-initialization jls