在 Java 中,switch 语句如果分支过多、逻辑复杂、或频繁变动,通常就需要重构。下面按常见场景 + 重构方式 + 示例给你一个实用清单。
| 场景 | 推荐重构方式 |
|---|---|
| 根据类型做不同行为 | 多态 / 策略模式 |
| 根据状态做不同处理 | 状态模式 |
| 简单映射关系 | Map + Function |
| 枚举行为不同 | 枚举 + 方法 |
| 分支只是返回不同值 | 表驱动(Map) |
| 分支非常稳定、简单 | 保留 switch(无需重构) |
public void handle(String type) {
switch (type) {
case "A":
System.out.println("处理A");
break;
case "B":
System.out.println("处理B");
break;
default:
throw new IllegalArgumentException();
}
}
interface Handler {
void handle();
}
class AHandler implements Handler {
public void handle() {
System.out.println("处理A");
}
}
class BHandler implements Handler {
public void handle() {
System.out.println("处理B");
}
}
Map<String, Handler> handlers = Map.of(
"A", new AHandler(),
"B", new BHandler()
);
public void handle(String type) {
handlers.get(type).handle();
}
✅ 优点:
switch (color) {
case RED: return "红";
case GREEN: return "绿";
}
enum Color {
RED("红"),
GREEN("绿");
private final String desc;
Color(String desc) {
this.desc = desc;
}
public String desc() {
return desc;
}
}
适合「只是返回不同结果」
Map<Integer, String> map = Map.of(
1, "一",
2, "二"
);
String result = map.get(code);
或带行为:
Map<String, Runnable> actions = Map.of(
"A", () -> System.out.println("A"),
"B", () -> System.out.println("B")
);
用于:
interface State {
void handle();
}
class DraftState implements State { ... }
class PaidState implements State { ... }
String desc = switch (color) {
case RED -> "红";
case GREEN -> "绿";
default -> "未知";
};
✅ 更简洁、强制处理所有分支
✅ 以下情况可以保留 switch:
“switch 在变,就用多态;
switch 在映射,就用 Map;
switch 在枚举,就放枚举里。”
如果你愿意,可以把你现在的 switch 代码贴出来,我可以直接帮你重构成最优结构。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。