// "Cast expression to 'java.lang.String'" "false" import java.util.function.Predicate; import java.util.function.Supplier; class X { public static String getOrDefault(String prefer, Supplier def) { return getOrDefault(() -> prefer, String::isEmpty, def.get()); } public static T getOrDefault(Supplier prefer, Predicate abandon, Supplier def) { return null; } }