import java.util.*; class Test { public static , C extends Collection> RC collectionGenericTest(C collection, Lambda lambda) { return (RC) new Vector(); } public static , C extends List> RC listGenericTest(C list, Lambda lambda) { return (RC) new Vector(); } public static void testGeneric() { Collection testCollection = collectionGenericTest(new Vector(), new Lambda() { @Override public String lambda(Integer l) { return null; } }); List testList = listGenericTest(new Vector(), new Lambda() { @Override public String lambda(Integer l) { return null; } }); } private interface Lambda { public R lambda(A l); } private static class Vector extends AbstractList implements List { public Vector() { } } }