【发布时间】:2017-11-05 20:31:43
【问题描述】:
我听说处理运行时异常并不总是一个好习惯。我已经实现了一个将产品评级作为参数的方法,如果当前产品对象有这个评级,它会返回一个 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();
}
}
【问题讨论】:
-
返回
null有什么问题? -
如果要抛出异常,请抛出
NoSuchElementException,而不是更一般的RuntimeException。 -
您可以返回
Optional<ProductDTO>。 -
@samba 但你已经有
productDTO != nullcheck.... -
在你们使用
null向其他人求婚之前,请务必阅读 Tony Hoare 的道歉。 en.wikipedia.org/wiki/Tony_Hoare#Apologies_and_retractions
标签: java exception runtimeexception