как сделать в своем классе конструктор функции?

Рейтинг: 0Ответов: 1Опубликовано: 03.02.2023

у класса Button есть функция .setOnClickListener{}, где после нажатия на кнопку будет выполняться то, что написано в фигурных скобках. как сделать подобное для своего класса?

Ответы

▲ 2Принят

Это не "конструктор функции", это просто передача лямбды как аргумента в метод.

На kotlin .setOnClickListener{} - это то же самое что .setOnClickListener() {} и то же самое что .setOnClickListener({}). Лямбда (то что в фигурных скобках) просто передается в метод как аргумент. Если она последний аргумент - она может выноситься из круглых скобок, если единственный аргумент - круглые скобки можно опустить (см. Passing trailing lambdas)

Пример, то что передано в doSomething будет вызвано внутри этого метода:

class Test {
    fun doSomething(handler: () -> Unit) {
        handler.invoke()
    }
}


fun main() {
    val test = Test()

    test.doSomething({
        println("Hello 1")
    })

    test.doSomething() {
        println("Hello 2")
    }

    test.doSomething {
        println("Hello 3")
    }
}