@SuppressWarnings("unchecked") public class LubRawTypes { public static boolean flag = false; class MyGen<T> {} MyGen<MyGen<MyGen<String>>> test(MyGen myGen1, MyGen myGen2) { return flag ? myGen1 : myGen2; } MyGen<MyGen<MyGen<String>>> test2(MyGen myGen1, MyGen<MyGen<MyGen<String>>> myGen2) { return flag ? myGen1 : myGen2; } MyGen<MyGen<MyGen<String>>> test3(MyGen myGen1, MyGen<MyGen<MyGen<String>>> myGen2) { return flag ? myGen2 : myGen1; } }