code: @SafeVarargs
      public static <X extends Throwable> Try<Void, X> runWithCatch(final CheckedRunnable<X> cf, final Class<? extends X>... classes) {
          Objects.requireNonNull(cf);
          try {
              cf.run();
              return Try.success(null);
          } catch (final Throwable t) {
  
              if (classes.length == 0)
                  return Try.failure((X) t);
              val error = Stream.of(classes)
                  .filter(c -> c.isAssignableFrom(t.getClass()))
                  .findFirst();
              if (error.isPresent())
                  return Try.failure((X) t);
              else
                  throw ExceptionSoftener.throwSoftenedException(t);
          }
  
      }
docs: Try to execute supplied Runnable and will Catch specified Excpetions or java.lang.Exception
  if none specified.
  
  @param cf CheckedRunnable to recover to execute
  @param classes  Exception types to catch (or java.lang.Exception if none specified)
  @return New Try