如何停止使用 Optional IsPresent() 乱扔代码?

ble*_*h10 0 java coding-style code-cleanup optional

所以我完全使用 isPresent 而不是使用 == null 来检查对象是否成功返回,但我觉得我陷入了用 isPresent 乱丢代码的坑。

所以假设我有一堆不同的端点来检索或更新模型。我希望在他们每个人的开头都没有 isPresent 检查这个对象是否存在!

例子:

    Optional<Object> myObject = objectRegistry.get(name);
    if (myObject.isPresent()) {
        doSomething();
    } else {
        throw new ObjectNotFoundException(stampName);
    } 
Run Code Online (Sandbox Code Playgroud)

我正在寻找解决这种乱扔垃圾的最佳实践,我可以想象其中一种解决方案是使用一种方法来执行此检查,并且我可以随时调用它,而调用它的其他方法将不得不抛出 ObjectNotFoundException

And*_*lko 6

我希望在他们每个人的开头都没有 isPresent 检查这个对象是否存在!

需要检查是因为如果它不存在就会抛出异常。

// note how this opposite check reduces the nestedness 
// and simplifies the flow
if (!myObject.isPresent()) {
    throw new ObjectNotFoundException(stampName);
}

final Object o = myObject.get();
// carry on with 'o'
Run Code Online (Sandbox Code Playgroud)

对于 Java8,这将是

final Object o = myObject.orElseThrow(() -> new ObjectNotFoundException(stampName));
// carry on with 'o'
Run Code Online (Sandbox Code Playgroud)

它会将代码减少到一行,您可以将其移至模板方法

  • @bleh10 你刚刚回复了我的评论“这不正是我正在寻找的”,但你接受了这个答案?我很困扰。这不是“用‘orElseThrow’乱扔你的代码”吗? (2认同)
  • @Sweeper我有点误解你了,看到它写下来改变了我的观点,我道歉 (2认同)