
本文探讨了在 Java 中如何根据不同的区域设置,动态地配置 `switch` 语句。由于 `switch` 语句的 `case` 标签必须是常量表达式,直接使用资源文件中的字符串值是不允许的。本文提供了两种解决方案:使用 `if-else if` 语句替代 `switch`,以及使用 `Map` 进行查找。
在 Java 中,switch 语句提供了一种简洁的方式来根据不同的条件执行不同的代码块。然而,switch 语句的一个关键限制是 case 标签必须是常量表达式。这意味着我们不能直接使用从资源文件中读取的字符串值作为 case 标签,因为这些值在编译时是未知的。本文将介绍两种解决此问题的方法,以便可以根据用户的区域设置动态配置 switch 语句的行为。
最直接的解决方案是使用一系列的 if-else if 语句来替代 switch 语句。虽然这种方法可能不如 switch 语句简洁,但它提供了更大的灵活性,允许我们使用任何表达式作为条件。
以下是一个示例,展示了如何使用 if-else if 语句来根据选择的语言设置不同的 Locale:
立即学习“Java免费学习笔记(深入)”;
final String selected = Objects.requireNonNull(comboBox.getSelectedItem()).toString();
if (selected.equals(resourceBundle.getString("menu.settings.language.german"))) {
Locale.setDefault(new Locale("de", "DE"));
} else if (selected.equals(resourceBundle.getString("menu.settings.language.english_uk"))) {
Locale.setDefault(new Locale("en", "UK"));
} else if (selected.equals(resourceBundle.getString("menu.settings.language.english_us"))) {
Locale.setDefault(new Locale("en", "US"));
} else if (selected.equals(resourceBundle.getString("menu.settings.language.french"))) {
Locale.setDefault(new Locale("fr", "FR"));
}优点:
缺点:
另一种更优雅的解决方案是使用 Map 来存储字符串值和对应的操作。我们可以将资源文件中的字符串值作为 Map 的键,并将 Runnable 对象作为值。Runnable 对象封装了需要执行的代码。
以下是一个示例,展示了如何使用 Map 来实现相同的逻辑:
final Map<String, Runnable> localeActions = Map.ofEntries(
Map.entry(
resourceBundle.getString("menu.settings.language.german"),
() -> Locale.setDefault(new Locale("de", "DE"))
),
Map.entry(
resourceBundle.getString("menu.settings.language.english_uk"),
() -> Locale.setDefault(new Locale("en", "UK"))
),
Map.entry(
resourceBundle.getString("menu.settings.language.english_us"),
() -> Locale.setDefault(new Locale("en", "US"))
),
Map.entry(
resourceBundle.getString("menu.settings.language.french"),
() -> Locale.setDefault(new Locale("fr", "FR"))
)
);
final Runnable action = localeActions.getOrDefault(
Objects.requireNonNull(comboBox.getSelectedItem()).toString(),
() -> {});
action.run();在这个例子中,Map.ofEntries 方法用于创建一个不可变的 Map。每个 Map.entry 包含一个从资源文件中读取的字符串值和一个 Runnable 对象。getOrDefault 方法用于查找与选定字符串对应的 Runnable 对象。如果找不到匹配的键,则执行默认的 Runnable 对象(在本例中,它是一个空操作)。
优点:
缺点:
虽然 Java 的 switch 语句不允许使用非常量表达式作为 case 标签,但我们可以使用 if-else if 语句或 Map 数据结构来绕过这个限制。if-else if 语句简单易懂,但对于大量的 case 可能会变得冗长。Map 数据结构提供了一种更优雅和可维护的解决方案,特别是对于需要动态配置 switch 语句行为的情况。选择哪种方法取决于具体的应用场景和个人偏好。
以上就是使用本地化资源动态配置 Java Switch 语句的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号