public interface Holder<T> {
  T get();
}

public class MyHolder<T> implements Holder<T> {
  private final T content;

  public MyHolder(T someContent) {
    content = someContent;
  }

  @Override public T get() {
    return content;
  }
}

public String getFrom(Holder<String> h) {
  if(h == null)
    throw new IllegalArgumentException("h cannot be null");
  else
    return h.get();
}

public String doSomething() {
  MyHolder<String> holder = new MyHolder<>("Hello World");
  return getFrom(holder);
}

