Tao*_*itz 1 java exception-handling optional java-8
我正在尝试学习如何Optional在Java中使用- 但这似乎不正确我在做什么.
User user = null;
public AuthCheck(User user) throws Exception {
if (user == null) {
throw new Exception("No user!");
}
if (!(user.getStuff() != null && !user.getStuff().isEmpty())) {
throw new Exception("User has no stuff");
}
this.user = user;
}
Run Code Online (Sandbox Code Playgroud)
这是我尝试使用Optional以下方法转换它:
Optional<UserOptional> user;
public AuthCheckOptional(Optional<UserOptional> user) throws Exception {
user.orElseThrow(() -> new Exception("No User!"));
user.map(UserOptional::getStuff)
.orElseThrow(() -> new Exception("User has no stuff"));
this.user = user;
}
Run Code Online (Sandbox Code Playgroud)
我想我不需要两次单独检查.另外我相信我已经改变了逻辑,因为IsEmpty()没有发生.
您不想Optional用作输入参数; 这是一种反模式.查看有关DZone的这篇文章.
您可以采取以下措施来改进代码:
User user = null;
public authCheck(User user) {
Objects.requireNonNull(user, "No user!");
if (Objects.requireNonNull(user.getStuff(), "User has no stuff").isEmpty()) {
throw new RuntimeException("User has no stuff");
}
this.user = user;
}
Run Code Online (Sandbox Code Playgroud)
(方法名称应以Java中的小写字母开头.)
你可以进一步压缩它,但问题是代码是否更清晰.
null如果使用得当,没有任何问题.它意味着"未定义",我们在Java中没有非空对象引用,就像在Kotlin或Scala中一样.
但也许您可以想一下如何User创建对象,以便完全避免这个问题.您也许可以使用Builder设计模式.通常,重新考虑代码可以避免这样的情况.
| 归档时间: |
|
| 查看次数: |
187 次 |
| 最近记录: |