class Objects {
  private Objects() {
  }

  public static <T> T firstNonNull(T... objects) {
    for (T object : objects)
      if (object != null)
        return object;
    return null;
  }

  public static <T> T firstNonNull(Callable<T>... callables) {<FILL_FUNCTION_BODY>}

  public static <T> Callable<T> callable(final T obj) {
    return new Callable<T>() {
      @Override
      public T call() {
        return obj;
      }
    };
  }

  public static <T> T instantiate(Class<T> type) {
    try {
      Constructor<T> constructor = type.getDeclaredConstructor();
      if (!constructor.isAccessible())
        constructor.setAccessible(true);
      return constructor.newInstance();
    } catch (Exception e) {
      return null;
    }
  }
}

    for (Callable<T> callable : callables) {
      T obj = callable.call();
      if (obj != null)
        return obj;
    }
    return null;
  
<no_super_class>