It's very useful that ErrorHandler can wrap functions that return a value.  In order to wrap a fallible function, we need a default value to return in case the function fails.  This leads to method signatures like `getWithDefault()`.
It's very useful that ErrorHandler can wrap functions that return a value.  In order to wrap a fallible function, we need a default value to return in case the function fails.  This leads to method signatures like `getWithDefault()`.

But for an ErrorHandler which always rethrows exceptions as RuntimeExceptions, such as ErrorHandler.rethrow(), the default value is guaranteed to never be used, and it's a cognitive waste to have to think one up.

So, we now have two subclasses of ErrorHandler: Handling (which can throw a RuntimeException but doesn't have to) and Rethrowing (which always throws a RuntimeException by construction).  This lets each type have the correct methods when dealing with fallible functions that return values.
diffplug/durian,diffplug/durian