import java.util.ArrayList; import java.util.Collection; class C<T> { void foo1(Collection<? extends T> src) { T t = src.iterator().next(); } void foo2(ArrayList<? extends T> src) { T t = src.iterator().next(); } void foo3(Collection<? super T> dst, T t) { dst.add(t) } int foo4(Comparable<? super T> comparable, T t) { return comparable.compareTo(t); } void foo5(Collection<?> w) { } }