本文目录导读:

我来详细解答Java方法结构优化的各种案例和技巧。
方法拆分优化
1 单一职责原则
优化前:
public void processOrder(Order order) {
// 验证订单
if (order == null || order.getItems().isEmpty()) {
throw new IllegalArgumentException("Invalid order");
}
// 计算价格
double total = 0;
for (Item item : order.getItems()) {
total += item.getPrice() * item.getQuantity();
}
// 应用优惠
if (order.hasCoupon()) {
total = total * 0.9;
}
// 发送邮件
EmailService.sendOrderConfirmation(order.getCustomerEmail(), order);
// 更新库存
for (Item item : order.getItems()) {
InventoryService.updateStock(item.getProductId(), -item.getQuantity());
}
}
优化后:
public void processOrder(Order order) {
validateOrder(order);
double total = calculateTotal(order);
double finalPrice = applyDiscount(order, total);
updateInventory(order);
sendConfirmationEmail(order, finalPrice);
}
private void validateOrder(Order order) {
if (order == null || order.getItems().isEmpty()) {
throw new IllegalArgumentException("Invalid order");
}
}
private double calculateTotal(Order order) {
return order.getItems().stream()
.mapToDouble(item -> item.getPrice() * item.getQuantity())
.sum();
}
private double applyDiscount(Order order, double total) {
return order.hasCoupon() ? total * 0.9 : total;
}
private void updateInventory(Order order) {
order.getItems().forEach(item ->
InventoryService.updateStock(item.getProductId(), -item.getQuantity()));
}
private void sendConfirmationEmail(Order order, double total) {
EmailService.sendOrderConfirmation(order.getCustomerEmail(), order);
}
参数优化
1 参数对象模式
优化前:
public void createUser(String username, String email, String phone,
String address, int age, String gender) {
// 创建用户逻辑
}
优化后:
public class UserCreateRequest {
@NotNull @Size(min = 3, max = 50)
private String username;
@Email
private String email;
@Pattern(regexp = "^\\d{11}$")
private String phone;
private String address;
@Min(0) @Max(150)
private int age;
private String gender;
// getters/setters
}
public void createUser(UserCreateRequest request) {
// 创建用户逻辑
}
2 Builder模式
public class QueryBuilder {
private String table;
private List<String> columns = new ArrayList<>();
private Map<String, Object> conditions = new HashMap<>();
private String orderBy;
private Integer limit;
public static QueryBuilder select(String... columns) {
QueryBuilder builder = new QueryBuilder();
builder.columns.addAll(Arrays.asList(columns));
return builder;
}
public QueryBuilder from(String table) {
this.table = table;
return this;
}
public QueryBuilder where(String key, Object value) {
this.conditions.put(key, value);
return this;
}
public QueryBuilder orderBy(String orderBy) {
this.orderBy = orderBy;
return this;
}
public QueryBuilder limit(int limit) {
this.limit = limit;
return this;
}
public String build() {
StringBuilder sql = new StringBuilder("SELECT ");
sql.append(String.join(", ", columns));
sql.append(" FROM ").append(table);
if (!conditions.isEmpty()) {
sql.append(" WHERE ");
conditions.forEach((k, v) -> sql.append(k).append(" = '").append(v).append("' AND "));
sql.setLength(sql.length() - 4);
}
if (orderBy != null) {
sql.append(" ORDER BY ").append(orderBy);
}
if (limit != null) {
sql.append(" LIMIT ").append(limit);
}
return sql.toString();
}
}
// 使用示例
String sql = QueryBuilder.select("id", "name", "email")
.from("users")
.where("status", "active")
.where("age", 25)
.orderBy("created_at DESC")
.limit(10)
.build();
流式处理优化
1 循环优化
优化前:
public List<String> processUsers(List<User> users) {
List<String> result = new ArrayList<>();
for (User user : users) {
if (user.isActive() && user.getAge() > 18) {
String processed = user.getName().toUpperCase();
result.add(processed);
}
}
return result;
}
优化后:
public List<String> processUsers(List<User> users) {
return users.stream()
.filter(user -> user.isActive() && user.getAge() > 18)
.map(user -> user.getName().toUpperCase())
.collect(Collectors.toList());
}
异常处理优化
1 统一的异常处理
优化前:
public User getUser(Long id) {
try {
User user = userRepository.findById(id);
if (user == null) {
throw new RuntimeException("User not found");
}
return user;
} catch (Exception e) {
logger.error("Error getting user: " + e.getMessage());
throw e;
}
}
优化后:
public User getUser(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("User not found with id: " + id));
}
// 全局异常处理器
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<ErrorResponse> handleResourceNotFound(ResourceNotFoundException ex) {
ErrorResponse error = new ErrorResponse(
HttpStatus.NOT_FOUND.value(),
ex.getMessage(),
LocalDateTime.now()
);
return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);
}
}
条件逻辑优化
1 使用策略模式
优化前:
public double calculatePrice(String userType, double amount) {
if ("VIP".equals(userType)) {
return amount * 0.8;
} else if ("GOLD".equals(userType)) {
return amount * 0.85;
} else if ("SILVER".equals(userType)) {
return amount * 0.9;
} else {
return amount;
}
}
优化后:
// 策略接口
@FunctionalInterface
interface DiscountStrategy {
double applyDiscount(double amount);
}
// 策略实现
class VipDiscount implements DiscountStrategy {
@Override
public double applyDiscount(double amount) {
return amount * 0.8;
}
}
// 使用枚举+策略
public enum UserType implements DiscountStrategy {
VIP(0.8),
GOLD(0.85),
SILVER(0.9),
NORMAL(1.0);
private final double discountRate;
UserType(double discountRate) {
this.discountRate = discountRate;
}
@Override
public double applyDiscount(double amount) {
return amount * discountRate;
}
}
public double calculatePrice(UserType userType, double amount) {
return userType.applyDiscount(amount);
}
性能优化
1 缓存计算结果
优化前:
public int fibonacci(int n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
优化后:
private final Map<Integer, Integer> cache = new HashMap<>();
public int fibonacci(int n) {
if (n <= 1) return n;
return cache.computeIfAbsent(n, key -> {
return fibonacci(key - 1) + fibonacci(key - 2);
});
}
2 使用延迟加载
public class HeavyResource {
private String configuration;
// 使用Supplier实现延迟加载
private Supplier<String> configSupplier = this::loadConfiguration;
private String loadConfiguration() {
// 模拟耗时加载
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
return "Heavy Configuration Data";
}
public String getConfiguration() {
// 第一次调用时加载,之后直接返回缓存结果
if (configSupplier != null) {
configuration = configSupplier.get();
configSupplier = null;
}
return configuration;
}
}
代码简洁性优化
1 使用Optional避免空指针
public String getCityName(User user) {
return Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity)
.map(City::getName)
.orElse("Unknown");
}
2 使用默认方法
public interface ValidationStrategy {
boolean validate(String input);
// 默认方法提供组合功能
default ValidationStrategy and(ValidationStrategy other) {
return input -> this.validate(input) && other.validate(input);
}
default ValidationStrategy or(ValidationStrategy other) {
return input -> this.validate(input) || other.validate(input);
}
}
优化Java方法结构的核心原则:
- 单一职责:每个方法只做一件事
- 参数最小化:控制方法参数数量(最好不超过3个)
- 代码复用:提取公共逻辑
- 可读性优先:清晰的命名和结构
- 性能考虑:适当使用缓存和延迟加载
- 错误处理:统一的异常处理机制
- 函数式编程:利用Lambda和Stream优化代码
选择优化方案时要权衡:代码可读性、维护性和性能之间的平衡。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播