class Collection<T> {} interface Bar {} class BarImpl implements Bar {} interface Foo<E extends Bar> { Collection<E> getElements(); } class FooImpl implements Foo<BarImpl> { public Collection<BarImpl> getElements() { return null; } } public class Bazz { public static <E extends Bar> Collection<E> getElements(Collection<? extends Foo<E>> foos) { return null; } public static void failure(final Collection<FooImpl> foos) { <ref>getElements(foos); } }