interface Condition { boolean value(T t); } abstract class Test { protected static T findNearestTopLevelSymbol(Class clazz, Condition condition) { return null; } interface OCSymbol {} interface SwiftSymbol extends OCSymbol {} class AbstractCache {} class SwiftCache extends AbstractCache {} private static void foo(final Condition condition) { SwiftSymbol s = findNearestTopLevelSymbol(SwiftCache.class, condition); } private static void foo1(final Condition condition) { SwiftSymbol s = findNearestTopLevelSymbol(SwiftCache.class, condition); } }