gpt4 book ai didi

java - 在方法中处理 RuntimeException 的更好方法是什么?

转载 作者:行者123 更新时间:2023-12-02 02:30:58 25 4
gpt4 key购买 nike

我听说处理运行时异常并不总是一个好的做法。我已经实现了一种方法,该方法将产品评级作为参数,如果当前产品对象具有此评级,则它返回 ProductDTO 对象。我发现使该方法按预期工作的唯一方法是使用运行时异常。但根据 Joshua Bloch 的说法,使用异常来控制流程是一个非常糟糕的主意。

有没有办法改进方法的逻辑?

public ProductDTO findByRating(int productRating) {
ProductDTO productDTO = new ProductDTO();
if (productRating == this.avgRating()) {
productDTO.setProductName(productName);
productDTO.setProductsLeftForSale(productsLeftForSale());
productDTO.setAvgRating(avgRating());
productDTO.setTotalVotes(reviews.size());
return productDTO;
} else {
throw new RuntimeException(String.format("No Product found with the rating: %s", productRating));
}
}

.

List<ProductDTO> productDTOList = new ArrayList<>();    
int rating = 5;
for (BaseProduct product : products) {
try {
ProductDTO productDTO = product.findByRating(rating);
if (productDTO != null) {
productDTOList.add(productDTO);
}
} catch (RuntimeException e) {
e.printStackTrace();
}
}

最佳答案

也许看起来好一点:

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

...

public Optional<ProductDTO> findByRating(int rating) {
return this.avgRating() == rating ? Optional.of(createDTO()) : Optional.empty();
}

private ProductDTO createDTO() {
ProductDTO productDTO = new ProductDTO();
productDTO.setProductName(productName);
productDTO.setProductsLeftForSale(productsLeftForSale());
productDTO.setAvgRating(avgRating());
productDTO.setTotalVotes(reviews.size());
return productDTO;
}

public List<ProductDTO> findProductsByRating(int rating) {
return products.stream()
.map(product -> product.findByRating(rating))
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
}

关于java - 在方法中处理 RuntimeException 的更好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47126330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com