import java.util.*; class Test { class Predicate { private <S extends T> boolean test(final Collection src) { System.out.println(src); return true; } private <S extends T> boolean test(final Iterable iterable) { System.out.println(iterable); return false; } } public void testPredicate() { final Predicate predicate = new Predicate<>(); predicate.test(new ArrayList()); } }