闽公网安备 35020302035485号
// 深层嵌套的代码(不推荐)
public double calculateBonus(Employee employee) {
if (employee != null) {
if (employee.isActive()) {
if (employee.getPerformanceRating() >= 4) {
if (employee.getYearsOfService() > 5) {
return employee.getSalary() * 0.15;
} else {
return employee.getSalary() * 0.1;
}
} else {
return0.0;
}
} else {
return0.0;
}
} else {
return0.0;
}
}
优化:通过提前处理否定条件并返回,将嵌套结构扁平化。// 提前返回(推荐)
public double calculateBonus(Employee employee) {
if (employee == null) return0.0;
if (!employee.isActive()) return0.0;
if (employee.getPerformanceRating() < 4) return0.0;
// 堆代码 duidaima.com
// 核心逻辑简化为单层条件
return employee.getYearsOfService() > 5
? employee.getSalary() * 0.15
: employee.getSalary() * 0.1;
}
2.降低认知负担,聚焦核心逻辑.提前返回将"特殊情况"的处理前置,使后续代码专注于核心业务逻辑。
.代码变更时,线性结构比嵌套结构更易修改,降低引入错误的风险。
// 提前返回:每个条件处理一个拒绝场景
public void accessResource(User user) {
if (user == null) throw new IllegalArgumentException("用户未登录");
if (!user.isVerified()) throw new SecurityException("账号未认证");
if (!user.hasPermission("resource_access")) throw new AccessDeniedException("权限不足");
// 仅当所有校验通过后执行核心逻辑
loadResourceForUser(user);
}
5.避免逻辑遗漏,提高健壮性.提前返回强制要求开发者显式处理每个否定条件,减少潜在漏洞。
// 使用提前返回快速筛选无效请求
public void processOrder(Order order) {
if (order == null) return;
if (order.isCancelled()) return;
// 根据订单状态选择策略(避免 if-else)
OrderProcessor processor = OrderProcessorFactory.getProcessor(order.getStatus());
processor.process(order);
}
7.性能优化(次要)虽然现代编译器会优化代码路径,但提前返回可减少不必要的条件判断和变量初始化,在高并发场景下可能带来轻微性能提升。
2.复杂业务流程:如工作流引擎、状态机等场景,可能更适合使用状态模式或责任链模式。
3.边界条件处理
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
public class Restaurant {
private static final Map<String, Function<Integer, Double>> PRICE_CALCULATORS = new HashMap<>();
static {
// 使用 Java 8 的 put 方法初始化 Map
PRICE_CALCULATORS.put("麻辣香锅", quantity -> {
double basePrice = 58.0;
return quantity > 3 ? basePrice * 0.9 : basePrice;
});
PRICE_CALCULATORS.put("宫保鸡丁", quantity -> {
double basePrice = 38.0;
return quantity > 2 ? basePrice * 0.95 : basePrice;
});
// 其他菜品价格计算器...
}
public double calculatePrice(String dishName, int quantity) {
// 使用 getOrDefault 处理默认值
Function<Integer, Double> calculator = PRICE_CALCULATORS.getOrDefault(
dishName,
q -> 18.0// 默认价格函数
);
return calculator.apply(quantity) * quantity;
}
}
案例2:游戏角色系统 - 使用 Java 8 接口默认方法import java.util.HashMap;
import java.util.Map;
// 技能接口(Java 8 支持默认方法)
interface Skill {
void cast();
// 默认实现:未知技能
default void unknownSkill() {
System.out.println("未知技能");
}
}
// 角色类型枚举
enum RoleType {
WARRIOR(createWarriorSkills()),
MAGE(createMageSkills()),
ASSASSIN(createAssassinSkills());
private final Map<String, Skill> skills;
RoleType(Map<String, Skill> skills) {
this.skills = skills;
}
public void useSkill(String skillName) {
// 使用 Java 8 的 getOrDefault 方法
skills.getOrDefault(skillName, Skill.super::unknownSkill).cast();
}
// 静态工厂方法创建技能映射
private static Map<String, Skill> createWarriorSkills() {
Map<String, Skill> map = new HashMap<>();
map.put("冲锋", () -> System.out.println("战士使用冲锋,对前方敌人造成伤害!"));
map.put("防御", () -> System.out.println("战士开启防御姿态,减免50%伤害!"));
return map;
}
// 其他角色技能工厂方法...
}
案例3:交通出行系统 - 使用 Java 8 Function 接口import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
public class TravelPlanner {
private static final Map<String, Function<Double, Double>> TIME_CALCULATORS = new HashMap<>();
static {
// 公交时间计算:25km/h,超过10km增加20%时间
TIME_CALCULATORS.put("公交", distance -> {
double baseTime = distance / 25;
return distance > 10 ? baseTime * 1.2 : baseTime;
});
// 地铁时间计算:40km/h,超过15km增加10%时间
TIME_CALCULATORS.put("地铁", distance -> {
double baseTime = distance / 40;
return distance > 15 ? baseTime * 1.1 : baseTime;
});
// 其他交通方式...
}
public double calculateTravelTime(String transport, double distance) {
// 使用 getOrDefault 处理未知交通方式
Function<Double, Double> calculator = TIME_CALCULATORS.getOrDefault(
transport,
d -> d / 5// 默认步行速度
);
return calculator.apply(distance);
}
}
案例4:智能家居系统 - 使用 Java 8 接口默认方法// 设备接口(Java 8 支持默认方法)
interface SmartDevice {
void executeCommand(String command);
// 默认方法:处理未知命令
default void handleUnknownCommand(String command) {
System.out.println("未知命令:" + command);
}
}
// 电灯实现
class Light implements SmartDevice {
private boolean isOn;
private int brightness;
@Override
public void executeCommand(String command) {
switch (command) {
case"开启":
turnOn();
if (brightness < 30) setBrightness(70);
break;
case"关闭":
turnOff();
break;
case"调暗":
setBrightness(Math.max(0, brightness - 20));
break;
default:
handleUnknownCommand(command);
}
}
// 具体方法实现...
}
案例5:社交平台 - 使用 Java 8 Predicate 接口import java.util.HashMap;
import java.util.Map;
import java.util.function.Predicate;
// 用户类
class User {
private int level;
private boolean verified;
private boolean active;
private int followers;
// getters and setters...
}
// 权限校验接口
interface PermissionChecker {
boolean check(User user);
}
// 社交平台类
public class SocialPlatform {
private static final Map<String, PermissionChecker> PERMISSION_MAP = new HashMap<>();
private static final Map<String, ActionHandler> ACTION_HANDLER_MAP = new HashMap<>();
static {
// 使用 Java 8 Predicate 接口定义权限规则
PERMISSION_MAP.put("发布文章", user -> user.getLevel() >= 3 && user.isVerified());
PERMISSION_MAP.put("评论", user -> user.getLevel() >= 1);
PERMISSION_MAP.put("点赞", User::isActive);
PERMISSION_MAP.put("私信", user -> user.getLevel() >= 5 && user.getFollowers() >= 10);
// 注册动作处理器
ACTION_HANDLER_MAP.put("发布文章", SocialPlatform::createArticle);
ACTION_HANDLER_MAP.put("评论", SocialPlatform::createComment);
// 其他动作处理器...
}
public void processUserAction(User user, String action) {
if (user == null) {
System.out.println("请先登录!");
return;
}
// 使用 Java 8 的 Map 方法
PermissionChecker checker = PERMISSION_MAP.get(action);
if (checker != null && !checker.check(user)) {
System.out.println("权限不足,无法执行操作!");
return;
}
ActionHandler handler = ACTION_HANDLER_MAP.get(action);
if (handler != null) {
handler.handle(user);
} else {
System.out.println("未知操作:" + action);
}
}
// 静态方法:处理用户动作
private static void createArticle(User user) {
System.out.println(user + " 发布了一篇文章");
}
// 其他动作处理方法...
}
// 动作处理器函数式接口
@FunctionalInterface
interface ActionHandler {
void handle(User user);
}