/* * Sets up recursive bounds where the bounds themselves are type variables. */ interface MMyList<LL> {} interface MMyMap<KEY, VALUE> {} class Tester<EE extends TT, TT extends MMyList<EE>> {} class WithWildcard<ZZ extends QQ, QQ extends YY, YY extends MMyMap<QQ, ZZ>> { void context() { ZZ zz = null; QQ qq = null; YY yy = null; } } @SuppressWarnings("initialization.fields.uninitialized") class Test<KK extends FF, FF extends MMyMap<KK, KK>> { KK kk; FF ff; } @SuppressWarnings("initialization.fields.uninitialized") class RecursiveTypevarClass<T extends RecursiveTypevarClass<T>> { T t; } class RecursiveImplements implements MMyList<RecursiveImplements> {}