class List<A> { A t; Set<A> set(){ return null; } } class OfList<B> extends List<B> { } class Iterator<C> { C get (){ return null; } } class Set<D> { D d; Iterator<D> iterator(){ return null; } } class Test { void foo (){ OfList x = new OfList(); Iterator i = x.set().iterator(); Set u = (Set) i.get(); String s = (String) u.d; } }