简化 switch 语句以避免代码重复
Simplify a switch statement to avoid code duplication
无法显示实际代码(许可证问题):
代码如下:
String fullName = "";
switch(name) {
case "name1":
fullName = String.format("%s %s", name, "surname1");
break;
case "name2":
fullName = String.format("%s %s", name, "surname2");
break;
case "name3":
fullName = String.format("%s %s", name, "surname3");
break;
...
}
(cases后面有break语句,我这里没写)
问题来了:
有 16 个不同的 case 语句都具有完全相同的代码,除了 String.format() 的参数。
有什么方法可以简化这段代码吗?
注意:Java8 是必须的
好吧,如果您的所有案例都具有那种确切的形式,那么您可以简单地执行以下操作:
String surname;
switch (name) {
case "name1":
surname = "surname1";
break;
case "name2":
surname = "surname2";
break;
default:
surname = "";
break;
}
String fullname = String.format("%s %s", name, surname);
或使用Map
查找值:
Map<String, String> mapping = new HashMap<>();
mapping.put("name1", "surname1");
mapping.put("name2", "surname2");
mapping.put("name3", "surname3");
String surname = mapping.get(name); // Assuming name is always a valid map entry
String fullname = String.format("%s %s", name, surname);
别处概述的 Map
方法可能是 Java 8 的最佳方法,但请注意,从 Java 14 开始,您可以使用开关表达式:
String surname = switch (name) {
case "name1" -> "surname1";
case "name2" -> "surname2";
...
};
String fullName = String.format("%s %s", name, surname);
无法显示实际代码(许可证问题):
代码如下:
String fullName = "";
switch(name) {
case "name1":
fullName = String.format("%s %s", name, "surname1");
break;
case "name2":
fullName = String.format("%s %s", name, "surname2");
break;
case "name3":
fullName = String.format("%s %s", name, "surname3");
break;
...
}
(cases后面有break语句,我这里没写)
问题来了:
有 16 个不同的 case 语句都具有完全相同的代码,除了 String.format() 的参数。
有什么方法可以简化这段代码吗?
注意:Java8 是必须的
好吧,如果您的所有案例都具有那种确切的形式,那么您可以简单地执行以下操作:
String surname;
switch (name) {
case "name1":
surname = "surname1";
break;
case "name2":
surname = "surname2";
break;
default:
surname = "";
break;
}
String fullname = String.format("%s %s", name, surname);
或使用Map
查找值:
Map<String, String> mapping = new HashMap<>();
mapping.put("name1", "surname1");
mapping.put("name2", "surname2");
mapping.put("name3", "surname3");
String surname = mapping.get(name); // Assuming name is always a valid map entry
String fullname = String.format("%s %s", name, surname);
别处概述的 Map
方法可能是 Java 8 的最佳方法,但请注意,从 Java 14 开始,您可以使用开关表达式:
String surname = switch (name) {
case "name1" -> "surname1";
case "name2" -> "surname2";
...
};
String fullName = String.format("%s %s", name, surname);