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

How to stop littering your code with Optional IsPresent()?

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

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

示例:

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

我正在寻找解决这种乱扔垃圾的最佳做法,我可以想象其中一种解决方案是使用一种方法来执行此检查,我会在需要时调用它,而调用它的其他方法将具有抛出 ObjectNotFoundException

I would love to NOT have a isPresent in the beginning of every one of them checking if this object exist to begin with!

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

// 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'

其中 Java8 将是

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

它会将代码减少到一行,您可以将其移动到 a template method