Как Kotlin позволяет создавать такой интерфейс? я не понимаю этого

Я новичок в Kotlin, и я действительно запутался в этом фрагменте кода (источник):

private val purchasesUpdatedListener = PurchasesUpdatedListener { billingResult, purchases ->
       // To be implemented in a later section.
}

PurchasesUpdatedListener — это интерфейс и имеет одну абстрактную функцию onPurchasesUpdated.

В приведенном выше фрагменте мы никогда не создаем класс, реализующий этот интерфейс, мы даже не говорим, что переопределяем абстрактную функцию. Но каким-то образом эта одна строка, кажется, делает все как по волшебству.

У меня есть 2 вопроса:

  1. Что здесь происходит и как мне это понять, если я работаю с Java?
  2. Где я могу узнать больше об этих ярлыках? Я посмотрел на kotlinlang.org и не нашел там ничего об этом.

см. это: kotlinlang.org/docs/fun-interfaces.html#sam-conversions

Sarthak Mittal 03.04.2023 13:49

@SarthakMittal О, я этого не видел, спасибо, что поделились. Так что это относится только к функциональным интерфейсам. Я не могу сделать это, если интерфейс имеет более одной функции?

Plasty Grove 03.04.2023 13:53

точно @Plasty! :)

Sarthak Mittal 03.04.2023 13:56

@SarthakMittal Спасибо! Если вы можете опубликовать свой комментарий в качестве ответа, я могу принять его

Plasty Grove 03.04.2023 14:02
1
4
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

То, что вы ищете, - это функциональный интерфейс в kotlin, также называемый интерфейсом SAM (единый абстрактный метод).

Итак, пока у вас есть один абстрактный метод, и вы помечаете свой интерфейс ключевым словом fun:

fun interface FunInterface {
   fun isFun(): Boolean
}

Вы можете реализовать это анонимно следующим образом:

val funImpl = FunInterface { /* return Boolean */ }

В противном случае распространенный способ анонимного подкласса классов/интерфейсов — использование ключевого слова object:

val funImpl = object : FunInterface {
   override fun isFun(): Boolean {
       /* return Boolean */
   }
}

Смотрите это для получения дополнительной информации: https://kotlinlang.org/docs/fun-interfaces.html

Другие вопросы по теме