【问题标题】:ResourceBundle.getString with fallback if key not foundResourceBundle.getString 如果未找到密钥则回退
【发布时间】:2021-09-11 16:35:44
【问题描述】:

我正在尝试找到一种方法来使用资源包,如果找不到密钥,则可能会进行某种回退。 目前我发现的唯一方法是捕获异常:

try {
    resourceBundle.getString(key);
} catch (MissingResourceException ex) {
    return defaultValue;
}

这个问题有更好的解决方案吗(类似于Map 中的getOrDefault)?也许是另一个 API 更好的库?

【问题讨论】:

  • ResourceBundles 包含应用程序使用的本地化数据。应用程序已经知道它将查找哪些键。因此,ResourceBundle 查找失败是不正常的。您是否使用 ResourceBundle 来保存配置?这不是 ResourceBundle 的用途;为此使用常规属性资源(可以有任意数量的后备属性)。
  • @VGR 某些值在 UI 应用程序中是可选的,例如工具提示。例如,我使用键“x”创建按钮,然后在 ResourceBundles 中查找“x.label”和“x.tooltip”。我可以“硬编码”关于哪个 UI 元素具有或不具有工具提示的信息,但通过具有可选值,我可以拥有更简单的代码库,并且可以在需要时轻松添加资源(有时您可能只需要一种本地化的工具提示)。
  • 啊,好吧。那么maio290的回答就是最好的办法。

标签: java resourcebundle


【解决方案1】:

并非每个数据结构都支持这种方法。在您的情况下,您通常会使用 containsKey 方法检查是否包含密钥。

在代码中将异常捕获为“正常”流程并不是我所说的体面架构。

【讨论】: