class A<a> { } class B<a> extends A<a> { f(Boolean x) { if (x) { return new B<a>(); } else { return new C<Integer>(); } } } class C<a> extends B<A<a>> {}