TGViewer
Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck @mobileproglib · 9.17K subscribers
Post #7104 737
Как работают SAM-conversions

Single Abstract Method (SAM) интерфейсы — это интерфейсы только с одним абстрактным методом (функциональные интерфейсы). Kotlin поддерживает соглашение SAM — автоматическую конвертацию функций и lambda между Kotlin и Java.

SAM-conversions позволяют использовать Java-интерфейсы с единственным абстрактным методом в Kotlin, как если бы это были функциональные типы. В Kotlin вы можете использовать такие интерфейсы для создания лямбда-выражений без явного определения функционального типа.

При использовании интерфейса с единственным абстрактным методом в качестве функционального интерфейса в Java, вы можете передавать его экземпляры вместо лямбда-выражений. Это тоже возможно в Kotlin, но на самом деле Kotlin предоставляет более простой синтаксис для этого.

Когда вам нужно использовать функциональный интерфейс в Kotlin, вы можете передать lambda-выражение, которое соответствует сигнатуре единственного метода интерфейса, вместо экземпляра интерфейса. Компилятор сам преобразует лямбда-выражение в экземпляр интерфейса, используя функцию-расширение метода invoke интерфейса.

Пример:

interface OnClickListener {
fun onClick(view: View)
}

class Button {
fun setOnClickListener(listener: OnClickListener) {
// ...
}
}

val button = Button()
button.setOnClickListener { view ->
// обработка нажатия кнопки
}


В этом примере мы определяем интерфейс OnClickListener с единственным абстрактным методом onClick. Затем мы создаем класс Button, который может иметь слушатель, реализующий данный интерфейс. После этого мы создаем экземпляр Button и передаем лямбда-выражение с соответствующей сигнатурой в качестве слушателя. Компилятор автоматически преобразует это лямбда-выражение в экземпляр интерфейса OnClickListener, используя функцию-расширение invoke интерфейса.

📌 Лучшие вакансии для мобильных разработчиков

🐸 Библиотека мобильного разработчика

#буст #JuniorKit #Kotlin
  • ❤ 1
More from @mobileproglib
  1. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  2. Sep 15, 2026🖥 Наглядная шпаргалка по операторам Combine Внутри: описанием распространенных операторов…
  3. Sep 13, 2026🌸 Вселенная намекает: пора уже начать этот курс С 14 сентября цены в Proglib Academy выра…
  4. Sep 13, 2026🤪 Если бы можно было задать один вопрос про AI в разработке — что бы вы спросили? Как выб…
  5. Sep 9, 2026🤳 Как работает мобильная разработка с AI под капотом — интенсивы от Podlodka Crew Конфере…
  6. Aug 8, 2026⚙️ Kinetics — настраиваемые примитивы физического движения для SwiftUI Kinetics привносит…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →