Ссылка на метод — это просто ссылка на метод, независимо от того, сколько аргументов у метода есть на самом деле. Ссылка на конструктор — это просто частный случай ссылки на метод, который ссылается на конструктор.
Предположим, у вас есть класс Person
:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age age;
}
// getters, setters
}
Теперь также предположим, что у вас есть BiFunction<String, Integer, Person>
который сопоставляет аргументы имени и возраста с экземплярами класса Person
:
BiFunction<String, Integer, Person> personCreator =
(String name, Integer age) -> new Person(name, age);
Или, поскольку типы параметра лямбда-выражения напрямую определяются компилятором:
BiFunction<String, Integer, Person> personCreator = (name, age) -> new Person(name, age);
Вы можете использовать эту функцию с двумя аргументами следующим образом:
Person joe = personCreator.apply("Joe", 25);
Вы заметили, что тип и порядок параметров в лямбда-выражении (name, age)
совпадают с параметрами в конструкторе? Это означает, что вместо этого мы можем использовать ссылку на метод:
BiFunction<String, Integer, Person> personCreator = Person::new;
И это будет работать, как и ожидалось:
Person jane = personCreator.apply("Jane", 23);
Это просто для того, чтобы показать вам, что количество аргументов не имеет значения при использовании ссылок на методы. Все, что должно совпасть, — это сигнатура единственного абстрактного метода функционального интерфейса (в данном случае BiFunction.apply
) с сигнатурой конструктора.
Если вы хотите узнать больше о ссылках на методы, перейдите к разделу о методах. ссылки в Учебнике по Java.
person
fps
schedule
18.05.2017