public class Issue450 {

  Issue450(int i, Runnable... runnables) {}

  Issue450(Consumer<String> consumer) {
    consumer.consume("hello"); // Use lambda as a constructor argument
  }

  interface Top {
    public void consume(String s);
  }

  interface Sub extends Top {
    public default void otherMethod() {}
  }

  interface Consumer<T> {
    void consume(T t);
  }

  void varargs(Runnable... runnables) {}

  public static void consumeStr(String str) {}

  public static void consumeStr2(String str) {}

  <E extends Consumer<String>> void context(E e, Sub s) {
    new Issue450(Issue450::consumeStr);

    Consumer<String> cs1 = (false) ? Issue450::consumeStr2 : Issue450::consumeStr;
    Consumer<String> cs2 = (false) ? e : Issue450::consumeStr;
    Top t = (false) ? s : Issue450::consumeStr;

    new Issue450(42, new Thread()::start); // Use lambda as a constructor argument
    varargs(new Thread()::start, new Thread()::start); // Use lambda in a var arg list of method
  }
}
