【发布时间】:2021-05-07 15:31:21
【问题描述】:
对 Java 不太熟悉,我可能会做一些多余或不必要的事情。我得到一个ResourceBundle,然后希望将其转换为Map,然后使用地图中的值。
这就是我想要做的......
try {
bundle = ResourceBundle.getBundle("filename");
} catch (MissingResourceException e) {
...
} catch (Exception e) {
...
}
Map<String, String> map = convertResourceBundleToMap (bundle);
// Then else where in the code, to get a value, I do
map.get(key);
将ResourceBundle转换为Map的方法:
private static Map<String, String> convertResourceBundleToMap(ResourceBundle resource) {
Map<String, String> map = new HashMap<>();
Enumeration<String> keys = resource.getKeys();
while (keys.hasMoreElements()) {
String key = keys.nextElement();
String value = resource.getString(key);
map.put(key, value);
}
return map;
}
直接从ResourceBundle 获取值是否有缺点
resource.getString(key);
打电话?
另外,如果是在多线程环境中,如何做到这一点?
【问题讨论】:
-
来自文档:'...直接已知的具体子类 ListResourceBundle 和 PropertyResourceBundle 是线程安全的。'
-
转换为地图的一大缺点是您失去了 ResourceBundle 提供的所有国际化功能。 ResourceBundle 允许为不同的语言环境定义资源,并且它已经为用户当前的语言环境加载了适当的资源。您会因地图转换而失去所有这些功能。
-
@OHGODSPIDERS 我实际上更多地将它用作属性文件,而不是用于语言环境。直接从 ResourceBundle 获取值有缺点吗?