Single Abstract Method (SAM) conversion позволяет Kotlin автоматически преобразовывать лямбду в реализацию интерфейса, который определяет ровно один абстрактный метод.
Когда Java-метод ожидает SAM-интерфейс, такой как Runnable или Callable, ты можешь передать лямбду напрямую вместо многословного анонимного класса.
// Вместо этого:
Thread(object : Runnable {
override fun run() { println("Running") }
})
// Ты можешь написать это:
Thread { println("Running") }
Kotlin автоматически оборачивает лямбду в требуемую реализацию интерфейса во время компиляции.
fun interfaceДля Kotlin-интерфейсов SAM conversion не применяется автоматически — ты должен явно отметить интерфейс ключевым словом fun interface:
fun interface Validator {
fun validate(input: String): Boolean
}
val emailValidator = Validator { input -> input.contains("@") }
Это говорит компилятору, что интерфейс предназначен для SAM conversion, что позволяет использовать такой же лаконичный синтаксис с лямбдами.
fun interfaceKotlin автоматически применяет SAM conversion к любому интерфейсу Kotlin, который имеет ровно один абстрактный метод, без необходимости специального ключевого слова.
Новый — ещё не проверен сообществом
Вы