Создание объекта через ссылку на конструктор в Java
Конструктор тоже можно передать по ссылке.
Справа от :: пишут new, слева -
имя класса. Интерфейс без аргументов, например
Supplier, создаёт пустой объект.
Интерфейс с параметрами, например Function,
передаёт их в подходящий конструктор.
Фабрика записей может отдавать новый Post
по заголовку. Ссылка Post::new заменяет
лямбду с new Post(...):
import java.util.function.Function;
import java.util.function.Supplier;
class Post {
String title;
Post() {
this.title = "Draft";
}
Post(String title) {
this.title = title;
}
@Override
public String toString() {
return title;
}
}
public class Main {
public static void main(String[] args) {
Supplier<Post> empty = Post::new;
Function<String, Post> byTitle = Post::new;
System.out.println(empty.get());
System.out.println(byTitle.apply("Weekly digest"));
}
}
Компилятор выбирает конструктор по типу
функционального интерфейса. Для Supplier
нужен конструктор без параметров, для
Function<String, Post> - с одной
строкой.
Класс Article имеет конструктор
с одним параметром String topic.
Создайте статью с темой "Events"
отложенным созданием и выведите значение
поля topic.