为了清楚起见,可以对此进行一些简化:
public static void m(Predicate<Integer> predicate){}public static void m(Function<Integer, String> function){}并调用:
m(i -> "test")
您认为会发生什么?与您的问题相同。
此处的编译器必须知道方法才能找到目标类型,但是为了解析该方法,编译器需要知道目标类型(就像死锁一样)。
当您将强制转换添加到时
Predicate...,您正在创建一个 显式目标类型 ,据我所知,方法的重载考虑了该 类型的 返回类型。



