/ * Проходим ли мы в лямбду и ресивер.Каким будет получатель * /
частного удовольствия JavaClientBuilder.twitter (suppler: JavaTwitterBuilder. () -> Unit)
У нас действительно есть получатель в этой функции, иэто экземпляр JavaClientBuilder
, на который будет вызвана эта функция.
/ * Мы вызываем JavaTwitterBuilder (). Apply (..) Будет ли применять возврат вновь созданного объекта?Не уверен, почему мы должны передать сторонник в apply * /
twitter = JavaTwitterBuilder (). Apply (suppler) .build ()
Чтобы понять, как работает apply()
взгляните на его исходный код (упрощенная версия):
public inline fun <T> T.apply(block: T.() -> Unit): T {
block()
return this
}
Это функция расширения, объявленная для получателя типа T
и возвращающая экземпляр T
, который принимает блок -другая функция расширения с приемником типа T
, возвращающая Unit
.Обычно он используется для замены шаблона Builder - примените пользовательскую логику инициализации к объекту.В вашем случае suppler
- это блок, который содержит логику инициализации для экземпляра JavaTwitterBuilder
.Код функции создает экземпляр и использует apply()
с логикой в suppler
для инициализации этого экземпляра.
/ * Мы передаем лямбду и получатель, которые ничего не возвращают * /
private fun createClient (suppler: JavaClientBuilder. () -> Unit): JavaClient
В этом случае createClient()
не имеет приемника, это функция верхнего уровня.
/ * путаница: Не уверен насчет этого, так как мы называем Suppler.Просто интересно, является ли сторонник JavaClientBuilder, который был вызван в вышеупомянутом javaClient {} lambda * /
javaClientBuilder.suppler ()
suppler
- это лямбда с JavaClientBuilder
будучи типом получателя, который позволяет нам вызывать его для только что созданного экземпляра JavaClientBuilder
.
/ * Я так понимаю, это функция расширения, которая форматирует и возвращает строку из объекта JavaClientон был вызван * /
private val JavaClient.toConsole: String get () = "Создан клиент: $ {twitter.handle} $ {company.name}"
Правильно!Просто небольшая поправка, это расширение .Свойства могут иметь собственные методы получения и установки.Это свойство определяет пользовательский метод получения, поэтому при каждом обращении к этому свойству оно создает строку с форматом, описанным кодом получения.