class A<V> implements I<V> {
A() {}
A(V v) {}
A(A<? extends V> a) {}
V value;
A<String> aString;
A<Object> aObject;
void foo(V v) {}
static void bar(A<String> a) {}
A<String> method(Object o) {
new A<String>();
new A<>();
new A<>().foo(o);
if (new A<>().value != null) {}
I<String> var = new A<>();
I var2 = new A<>();
bar(new A<>()); // compile with java 8, but not 7
new A<>(o);
new A<>("test");
new A<>(aString);
return new A<>();
}
}
interface I<X> {}
interface J<Y, Z> {}
class B<X, Y, Z> implements I<X>, J<Y, Z> {
B() {}
J<String, Integer> j = new B<>();
void method() {
qix(new B<>());
bar(new B<>());
}
static void qix(I<String> a) {}
static void bar(J<String, Integer> a) {}
}
class C {}
interface K {}
class D<X extends C> {
D() {}
void foo(X x) {}
D<C> dC;
void method() {
new D<>().foo(null);
}
}
class E {
class F<X> {
F() {}
F(int i, X x, C c) {}
}
F<String> fString;
void foo(F<String> f) {}
void method(E e) {
foo(e.new F<String>());
foo(e.new F<>(42, "test", new C()));
}
}