В настоящее время я погружаюсь глубже в функции Java 8
, такие как Lambdas и ссылки на методы. Играя немного, я привел меня к следующему примеру:
public class ConsumerTest {
private static final String[] NAMES = {"Tony", "Bruce", "Steve", "Thor"};
public static void main(String[] args) {
Arrays.asList(NAMES).forEach(Objects::requireNonNull);
}
}
Мой вопрос:
Почему строка внутри основного метода компилируется?
Если я правильно понял это, сигнатура метода ссылки должна соответствовать сигнатуре SAM функционального интерфейса. В этом случае потребитель требует следующую подпись:
void accept(T t);
Однако метод requireNonNull
возвращает T
вместо void:
public static <T> T requireNonNull(T obj)