Optional
is not intended for the purpose of dealing with exceptions, it was intended to deal with potential null
s without breaking the flow of your program. For example:
myOptional.map(Integer::parseInt).orElseThrow(() -> new RuntimeException("No data!");
This will automatically skip the map
step if the optional was empty and go right to the throw
step -- a nice unbroken program flow.
When you write:
myOptionalValue.orElseThrow(() -> new RuntimeException("Unavailable"));
... what you are really saying is: Return my optional value, but throw an exception if it is not available.
What you seem to want is a way to create an optional (that instantly catches the exception) and will rethrow that exception when you try using the optional.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…