Я не понимаю, как работает Kotlin Delegation, когда дело доходит до включения Bluetooth на Android.
Я сталкивался с этой справочной документацией на веб-сайте Kotlin, но, похоже, что-то идет мне в голову.
https://kotlinlang.org/docs/reference/delegation.html
interface Base {
fun print()
}
class BaseImpl(val x: Int) : Base {
override fun print() { print(x) }
}
class Derived(b: Base) : Base by b
fun main() {
val b = BaseImpl(10)
Derived(b).print()
}
Условие by
в списке супертипов для Derived
указывает, что b
будет храниться внутри объектов Derived
икомпилятор сгенерирует все методы Base
, которые перенаправляют на b
.
В принципе, я понимаю, что класс BaseImpl
наследует от Base
, и поэтому, когда мы объявляем val b = BaseImpl(10)
всеработает так, как если бы это была Java, но как только мы представили этот класс Derived
, я запутался в том, что пытается достичь директива : Base by b
.
Мы только ищем возможности реализовать нужные методы и переопределять все остальные?
Я думаю, что заблудился в тезисах всего этого.Поэтому, когда я пытаюсь включить Bluetooth, я не совсем уверен, что здесь происходит.
private val bluetoothAdapter: BluetoothAdapter? by
lazy(LazyThreadSafetyMode.NONE) {
val bluetoothManager =
getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
bluetoothManager.adapter
}
Я надеюсь, что я не задаю слишком много вопросов или даже слишком широкий вопрос, но когда мыобъявляя bluetoothAdapter
когда он инициализируется?Это инициализируется прямо здесь или просто когда мы его используем?И инициализируется ли он тем, что находится между {}
s?Таким образом, bluetoothManager
находится только в пределах объема при инициализации bluetoothAdapter
?
Пожалуйста, прости мое невежество ... Это настоящая борьба.Спасибо!