为什么这个 Java 8 方法引用会编译?
我目前正在深入研究Lambda和方法参考等功能。稍微玩一下,我得出了下面的例子:Java 8
public class ConsumerTest {
private static final String[] NAMES = {"Tony", "Bruce", "Steve", "Thor"};
public static void main(String[] args) {
Arrays.asList(NAMES).forEach(Objects::requireNonNull);
}
}
我的问题是:
为什么 main 方法内部的行会编译?
如果我正确理解了这个问题,那么引用的方法的签名必须与功能接口的SAM签名相对应。在这种情况下,使用者需要以下签名:
void accept(T t);
但是,该方法返回而不是 void:requireNonNull
T
public static <T> T requireNonNull(T obj)