class Bar<E> {}

public class Foo<E> {
    public Foo(Bar<? extends E> b) {}
    public Foo(Bar<? extends E> b1, Bar<? extends E> b2) {}
    public static <E> Foo<E> method(Bar<? extends E> b) { return null; }
    public static <E> Foo<E> method(Bar<? extends E> b1, Bar<? extends E> b2) { return null; }

    public void run() {
        Bar<? extends String> b = new Bar<>();

        // constructors
        Foo<String> f1 = new Foo<>(b);
        Foo<String> f2 = new Foo<>(b, b);

        // methods
        Foo<String> f3 = Foo.method(b);
        Foo<String> f4 = Foo.method(b, b);
    }
}
