我目前正在深入研究Java 8
Lambda 和方法引用等功能。玩了一下让我想到了以下示例:
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);
但是,该requireNonNull
方法返回T
而不是 void:
public static <T> T requireNonNull(T obj)