Я изучаю новые возможности Java 8.
Я играю с разными примерами и обнаружил странное поведение:
public static void main(String[] args) {
method(Test::new);
}
static class Test{
}
private static void method(Supplier<Test> testSupplier){
Test test = testSupplier.get();
}
Этот код успешно компилируется, но я понятия не имею, как он работает.
Почему Test::new
подходит в качестве поставщика?
Интерфейс поставщика выглядит очень просто:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
java.lang.invoke.LambdaMetafactory
- person zapl   schedule 21.09.2015class Test
, неявно имеет конструктор без аргументов. Вот почему вы можете написатьnew Test()
и заставить его работать, независимо от того, почему лямбда-выражение или ссылка на метод этого конструктора работают. - person Stuart Marks   schedule 21.09.2015