我是否需要将资源包转换为地图才能访问这些值,还是可以直接使用资源包?
Do I need to convert a resource bundle to a map to access the values or can I directly use the bundle?
不太熟悉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);
打电话?
另外,如果是在多线程环境中,如何做到这一点?
除非你有一些奇特的用例,否则你可以而且应该直接使用 ResourceBundle
方法,原因如下:
ResourceBundle
专门设计用于这种方式。还有其他可用的方法,例如 getStringArray()
。如果将其转换为普通地图,您将丢失一些 ResourceBundle
信息。
ResourceBundle
有额外的父子逻辑(如 Properties
)。它解决了默认问题,当不是所有的字符串都被翻译成每个语言环境时。当转换为地图时,这种父子关系将被反规范化。
转换为地图是一种额外的性能和内存开销,不会带来任何显着的好处。
ResourceBundle
是线程安全的。默认方法实现是线程安全的,class 契约要求所有子classes 是线程安全的。
我可以考虑将 ResourceBundle
转换为映射,仅用于一些不寻常的用例,例如将字符串序列化为 JSON,或以某种方式转换 keys/values。
不太熟悉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);
打电话?
另外,如果是在多线程环境中,如何做到这一点?
除非你有一些奇特的用例,否则你可以而且应该直接使用 ResourceBundle
方法,原因如下:
ResourceBundle
专门设计用于这种方式。还有其他可用的方法,例如getStringArray()
。如果将其转换为普通地图,您将丢失一些ResourceBundle
信息。ResourceBundle
有额外的父子逻辑(如Properties
)。它解决了默认问题,当不是所有的字符串都被翻译成每个语言环境时。当转换为地图时,这种父子关系将被反规范化。转换为地图是一种额外的性能和内存开销,不会带来任何显着的好处。
ResourceBundle
是线程安全的。默认方法实现是线程安全的,class 契约要求所有子classes 是线程安全的。
我可以考虑将 ResourceBundle
转换为映射,仅用于一些不寻常的用例,例如将字符串序列化为 JSON,或以某种方式转换 keys/values。