There is a method get(sql)
(I can not modify it). This method returns MyObjects and it has to be in try catch block because JqlParseException
is possible there. My code is:
String sql = something;
try{
MyObject object = get(sql);
} catch(JqlParseException e){
e.printStackTrace();
} catch(RuntimeException e){
e.printStackTrace();
}
I want to remove try catch and use Optional
class, I tried:
MyObject object = Optional.ofNullable(get(sql)).orElseThrow(RuntimeException::new);
but IDE force there try catch too. And for:
MyObject object = Optional.ofNullable(get(sql)).orElseThrow(JqlParseException::new));
is an error (in IDE) The type JqlParseException does not define JqlParseException() that is applicable
. Is there any way to avoid try catch blocks and use optional?
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.