本文目录导读:

我来详细讲解Java代码中流程结构的规整优化方法。
核心原则
单一职责原则
// ❌ 不规整:一个方法做太多事情
public void processOrder(Order order) {
// 验证订单
if (order == null || order.getItems().isEmpty()) {
throw new IllegalArgumentException("订单无效");
}
// 计算价格
double total = 0;
for (Item item : order.getItems()) {
total += item.getPrice() * item.getQuantity();
}
// 发送邮件
sendEmail(order.getUserEmail(), "订单已处理");
// 更新数据库
updateDatabase(order);
}
// ✅ 规整:每个方法职责单一
public void processOrder(Order order) {
validateOrder(order);
double total = calculateTotal(order);
updateStock(order);
sendConfirmationEmail(order, total);
}
private void validateOrder(Order order) {
if (order == null || order.getItems().isEmpty()) {
throw new IllegalArgumentException("订单无效");
}
}
private double calculateTotal(Order order) {
return order.getItems().stream()
.mapToDouble(item -> item.getPrice() * item.getQuantity())
.sum();
}
尽早返回(Early Return)
// ❌ 不规整:深层嵌套
public String processUser(User user) {
String result = "";
if (user != null) {
if (user.isActive()) {
if (user.hasPermission()) {
result = executeTask(user);
} else {
result = "无权限";
}
} else {
result = "用户未激活";
}
} else {
result = "用户不存在";
}
return result;
}
// ✅ 规整:尽早返回
public String processUser(User user) {
if (user == null) {
return "用户不存在";
}
if (!user.isActive()) {
return "用户未激活";
}
if (!user.hasPermission()) {
return "无权限";
}
return executeTask(user);
}
条件判断优化
卫语句替换条件嵌套
// ❌ 不规整
public double calculatePrice(Order order) {
if (order != null) {
if (order.isValid()) {
if (order.hasDiscount()) {
return order.getPrice() * 0.9;
} else {
return order.getPrice();
}
} else {
throw new IllegalArgumentException("Invalid order");
}
} else {
throw new IllegalArgumentException("Order is null");
}
}
// ✅ 规整:卫语句
public double calculatePrice(Order order) {
if (order == null) {
throw new IllegalArgumentException("Order is null");
}
if (!order.isValid()) {
throw new IllegalArgumentException("Invalid order");
}
return order.hasDiscount()
? order.getPrice() * 0.9
: order.getPrice();
}
多态替代if-else
// ❌ 不规整:大量if-else
public double calculateShipping(String type, double weight) {
if ("STANDARD".equals(type)) {
return weight * 5;
} else if ("EXPRESS".equals(type)) {
return weight * 10 + 20;
} else if ("OVERSEAS".equals(type)) {
return weight * 15 + 50;
} else {
return 0;
}
}
// ✅ 规整:策略模式
interface ShippingStrategy {
double calculate(double weight);
}
class StandardShipping implements ShippingStrategy {
public double calculate(double weight) {
return weight * 5;
}
}
class ExpressShipping implements ShippingStrategy {
public double calculate(double weight) {
return weight * 10 + 20;
}
}
// 使用Map或工厂获取策略
循环优化
使用Stream API
// ❌ 不规整
List<String> result = new ArrayList<>();
for (User user : users) {
if (user.isActive()) {
String name = user.getName().toUpperCase();
if (name.startsWith("A")) {
result.add(name);
}
}
}
result.sort(Comparator.naturalOrder());
// ✅ 规整:Stream流式处理
List<String> result = users.stream()
.filter(User::isActive)
.map(user -> user.getName().toUpperCase())
.filter(name -> name.startsWith("A"))
.sorted()
.collect(Collectors.toList());
避免循环中的重复计算
// ❌ 不规整
for (int i = 0; i < list.size(); i++) { // 每次都调用size()
if (list.get(i).getValue() > calculateThreshold()) { // 每次都计算
// 处理
}
}
// ✅ 规整
int size = list.size();
double threshold = calculateThreshold();
for (int i = 0; i < size; i++) {
if (list.get(i).getValue() > threshold) {
// 处理
}
}
异常处理优化
精确异常捕获
// ❌ 不规整
try {
processFile(filename);
saveToDatabase(data);
sendNotification(email);
} catch (Exception e) {
logger.error("处理失败", e);
throw e;
}
// ✅ 规整
try {
processFile(filename);
} catch (FileNotFoundException e) {
logger.error("文件不存在: {}", filename);
throw new BusinessException("文件未找到");
}
try {
saveToDatabase(data);
} catch (SQLException e) {
logger.error("数据库保存失败", e);
throw new DataAccessException("保存数据失败");
}
try-with-resources
// ❌ 不规整
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader("file.txt"));
return reader.readLine();
} finally {
if (reader != null) {
reader.close();
}
}
// ✅ 规整
try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {
return reader.readLine();
}
方法设计优化
控制方法长度
// ❌ 不规整:方法太长
public void processOrder(Order order) {
// 50行代码...
// 验证、计算、更新、通知全在这里
}
// ✅ 规整:分解为小方法
public void processOrder(Order order) {
validateOrder(order);
double total = calculateOrderTotal(order);
saveOrder(order, total);
notifyCustomer(order.getCustomerEmail(), total);
}
减少参数数量
// ❌ 不规整:参数过多
public void createUser(String name, int age, String email,
String phone, String address, String city,
String zipCode) {
// 实现
}
// ✅ 规整:使用参数对象
public void createUser(UserCreateRequest request) {
// 实现
}
// 或使用建造者模式
User user = User.builder()
.name("张三")
.age(25)
.email("zhangsan@example.com")
.build();
代码组织规范
统一返回格式
// ✅ 规整:统一返回对象
public class ApiResult<T> {
private int code;
private String message;
private T data;
public static <T> ApiResult<T> success(T data) {
return new ApiResult<>(200, "success", data);
}
public static <T> ApiResult<T> error(int code, String message) {
return new ApiResult<>(code, message, null);
}
}
// 使用统一返回
public ApiResult<User> getUser(Long id) {
if (id == null) {
return ApiResult.error(400, "参数错误");
}
User user = userService.findById(id);
return ApiResult.success(user);
}
日志规范
// ✅ 规整:统一日志格式
private static final Logger logger = LoggerFactory.getLogger(OrderService.class);
public void processOrder(Order order) {
logger.info("开始处理订单: orderId={}", order.getId());
try {
// 处理逻辑
logger.debug("订单处理详细: items={}", order.getItems());
} catch (Exception e) {
logger.error("订单处理失败: orderId={}, error={}",
order.getId(), e.getMessage(), e);
throw e;
}
logger.info("订单处理完成: orderId={}", order.getId());
}
常量管理
// ❌ 不规整:魔法数字
if (status == 1) {
discount = price * 0.9;
} else if (status == 2) {
discount = price * 0.8;
}
// ✅ 规整:枚举或常量
public enum OrderStatus {
NEW(1),
ACTIVE(2),
COMPLETED(3);
private final int code;
OrderStatus(int code) {
this.code = code;
}
}
public static final double NEW_USER_DISCOUNT = 0.9;
public static final double VIP_DISCOUNT = 0.8;
实战建议
代码审查清单
public class CodeReviewChecklist {
// □ 每个方法是否只做一件事?
// □ 是否有深层嵌套?(超过3层需要优化)
// □ 是否存在大量if-else?(考虑多态或策略模式)
// □ 循环中是否有重复计算?
// □ 异常处理是否精确?
// □ 资源是否正确关闭?
// □ 参数是否过多?(超过5个考虑封装)
// □ 是否有魔法数字?
// □ 日志是否清晰?
// □ 代码是否容易测试?
}
持续优化流程
- 代码审查:每次提交前自审
- 静态分析:使用SonarQube等工具
- 重构时机:每次修改相关代码时顺手优化
- 团队规范:建立统一的代码规范文档
规整的代码不仅美观,更重要的是可维护、易测试、易扩展,建议将优化融入日常开发习惯,而不是等代码变得混乱后再重构。