Go to the home page  / Java  / Функциональное программирование  / Ссылки на методы  / Ссылка на конструктор

Ссылка на конструктор

Igor Lazarevsky, 2022.02.04 13:26

Чтобы сослаться (с помощью функционального интерфейса) на конструктор нужно использовать ключевое слово new.

ClassName::new  

Обратите внимание на тип переменной, в которую мы можем захотеть сохранить получившийся конструктор.

Предположим у нас конструктор получает String в параметрах. И сразу выводит в консоль этот текст.

public Main8(String name) {
    System.out.println("Hello " + name);
}

Так как у нас конструктор получает String name на вход, а на выходе выдает экземпляр класса (в нашем случае класса Main8), то и тип переменной должен быть Function<String, Main8>. И у нас получится такое присвоение

Function<String, Main8> main8Constructor1 = Main8::new;

Или мы можем придумать свой функциональный интерфейс, скажем такой

interface StringToMain8{
    Main8 getMessage(String msg);
}

Раз он функциональный, то в в нем должен быть только один метод с любым названием. Принимать метод должен String, а возвращать Main8

И присвоение будет таким

        StringToMain8 main8Constructor2 = Main8::new;

Вызвать конструктор и создать экземпляр класса тогда можно так

    main8Constructor1.apply("Valdemar");
    main8Constructor2.getMessage("Valdemar");

А весь код таким

import java.util.function.Function;

public class Main8 {
    interface StringToMain8{
        Main8 getMessage(String msg);
    }

    public Main8(String name) {
        System.out.println("Hello " + name);
    }

    public static void main(String[] args) {
        Function<String, Main8> main8Constructor1 = Main8::new;
        StringToMain8 main8Constructor2 = Main8::new;
        main8Constructor1.apply("Valdemar");
        main8Constructor2.getMessage("Valdemar");
    }
}
Igor Lazarevsky, 2022.02.04 13:38