return业务方法的类型和异常处理的最佳方式是什么?
What is the best way of return type and exception handling of business method?
在return类型和异常处理中,以下哪种业务方法最好?
/**
* Finds an entity identified by given arguments.
* @param ...
* @returns found entity of {@code null} if not found.
*/
public MyEntity find1(...) {
try {
return query.getSingleResult();
} catch (final NoResultException nre) {
return null;
}
}
/**
* Finds an entity identified by given arguments. Note that this method
* may raise {@code NoResultException}.
* See {@link TypedQuery#getSingleResult()}.
* @param ...
* @returns found entity
*/
public MyEntity find2(...) {
...
return query.getSingleResult(); // may throw NoResultException
}
/**
* Finds an entity identified by given arguments.
* @param ...
* @returns an optional of found entity; never {@code null}
*/
public Optional<MyEntity> find3(...) {
try {
return Optional.of(query.getSingleResult());
} catch (final NoResultException nre) {
return Optional.empty();
}
}
你所有的变体都是正确的。它们都是对异常做出反应的有效实现。
一组编码规则告诉您必须 return 可选值,始终在内部捕获异常或其他任何东西,这会使它们不合适。所以只要你没有这样的规矩,或者你坚持,就没事。
Which of following business methods are best, in return type and exception handling?
find1
绝对不好,因为它 returns null 并使用异常来控制流程。
find2
绝对适用于预期存在实体的情况。
如果find3
重写时没有try-catch块,那么对于实体可能不存在的情况也有好处。
在return类型和异常处理中,以下哪种业务方法最好?
/**
* Finds an entity identified by given arguments.
* @param ...
* @returns found entity of {@code null} if not found.
*/
public MyEntity find1(...) {
try {
return query.getSingleResult();
} catch (final NoResultException nre) {
return null;
}
}
/**
* Finds an entity identified by given arguments. Note that this method
* may raise {@code NoResultException}.
* See {@link TypedQuery#getSingleResult()}.
* @param ...
* @returns found entity
*/
public MyEntity find2(...) {
...
return query.getSingleResult(); // may throw NoResultException
}
/**
* Finds an entity identified by given arguments.
* @param ...
* @returns an optional of found entity; never {@code null}
*/
public Optional<MyEntity> find3(...) {
try {
return Optional.of(query.getSingleResult());
} catch (final NoResultException nre) {
return Optional.empty();
}
}
你所有的变体都是正确的。它们都是对异常做出反应的有效实现。
一组编码规则告诉您必须 return 可选值,始终在内部捕获异常或其他任何东西,这会使它们不合适。所以只要你没有这样的规矩,或者你坚持,就没事。
Which of following business methods are best, in return type and exception handling?
find1
绝对不好,因为它 returns null 并使用异常来控制流程。
find2
绝对适用于预期存在实体的情况。
如果find3
重写时没有try-catch块,那么对于实体可能不存在的情况也有好处。