class ClassExt { /** @noinspection UnusedDeclaration*/ public static T newInstance(Class clazz, Class t1, P1 p1, Class t2, P2 p2) { return null; } } abstract class TKey { protected abstract Class getType(); } class GoodIsRed6 { public static > TK createClone(TK tkey, String key) { Class clazz = null; return ClassExt.newInstance(clazz, String.class, key, Class.class, tkey.getType()); } }