Java 其中,如果lambda的目标类型可以';不能推断吗?

Java 其中,如果lambda的目标类型可以';不能推断吗?,java,lambda,higher-order-functions,Java,Lambda,Higher Order Functions,假设我有一个高阶函数,它接受一个通用谓词对象: public static <E> void foo(Predicate<E> predicate) {...} 编译和运行这是没有问题的,因为在某些地方有人只是将x的类型默认为Object。 为什么类型只是被默认的(而不是一开始就不让它编译),或者这种行为是在哪里指定的?我不能说我自己的答案是否完全正确,但我发现: JLS第18.1.13章: 当推理开始时,通常从类型参数声明P1、…、Pp和相关推理变量α1、…、αp的列

假设我有一个高阶函数,它接受一个通用谓词对象:

public static <E> void foo(Predicate<E> predicate) {...}
编译和运行这是没有问题的,因为在某些地方有人只是将x的类型默认为Object。

为什么类型只是被默认的(而不是一开始就不让它编译),或者这种行为是在哪里指定的?

我不能说我自己的答案是否完全正确,但我发现:

JLS第18.1.13章:

当推理开始时,通常从类型参数声明P1、…、Pp和相关推理变量α1、…、αp的列表生成一个绑定集。这样一个有界集的构造如下。对于每个l(1≤ L≤ p) :

如果Pl没有类型绑定,则绑定的αl
foo(x -> x != null);