public T orElseDoAndReturnDefault(Runnable function, T defaultVal) {
        if (isSuccessAndNotNull()) {
            return data;
        }
        function.run();
        return defaultVal;
    }
public T orElseDoAndReturnDefault ( Runnable function , T defaultVal ) { if ( isSuccessAndNotNull ( ) ) { return data ; } function . run ( ) ; return defaultVal ; }
The Runnable function here has NOTHING to do with Threads! It's just a functional interface that allows you to
run a piece of code (function) when the result data is null and success is false - a function that receives and returns nothing (void)

@param function
@param defaultVal
@return