Я новичок в Kotlin, и я действительно запутался в этом фрагменте кода (источник):
private val purchasesUpdatedListener = PurchasesUpdatedListener { billingResult, purchases ->
// To be implemented in a later section.
}
PurchasesUpdatedListener
— это интерфейс и имеет одну абстрактную функцию onPurchasesUpdated
.
В приведенном выше фрагменте мы никогда не создаем класс, реализующий этот интерфейс, мы даже не говорим, что переопределяем абстрактную функцию. Но каким-то образом эта одна строка, кажется, делает все как по волшебству.
У меня есть 2 вопроса:
@SarthakMittal О, я этого не видел, спасибо, что поделились. Так что это относится только к функциональным интерфейсам. Я не могу сделать это, если интерфейс имеет более одной функции?
точно @Plasty! :)
@SarthakMittal Спасибо! Если вы можете опубликовать свой комментарий в качестве ответа, я могу принять его
То, что вы ищете, - это функциональный интерфейс в 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
см. это: kotlinlang.org/docs/fun-interfaces.html#sam-conversions