简化 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);