code: public T orElseDoAndReturnDefault(Runnable function, T defaultVal) {
          if (isSuccessAndNotNull()) {
              return data;
          }
          function.run();
          return defaultVal;
      }
docs: 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