public class IterableGenerics { interface Data extends Iterable<String> { } <T extends Data> void typeParam(T t) { for(String s : t); } void wildcard(Iterable<? extends Data> t) { for(Object a: t.iterator().next()); } }