Intereting Posts
Как получить исключение в init block kotlin «Невозможно преобразовать объект типа java.lang.String в тип com.android.projectrc.Listing» при использовании Firebase RecyclerAdapter Тревога Котлина и дженериков В «Котлине» еще работает «внутренний» модификатор видимости? Любой способ рассказать компилятору Kotlin о том, что ранее вызываемая функция уже проверила значение null Как передать массив целых чисел методу, ожидающему `Array <T>`? Спецификация Jpa, чтобы найти подмножество значения поля Как передать класс класса kotlin или экземпляр класса kotlin в качестве аргументов Отражение Котлина – создание объектов из CSV Firebase Admin SDK не может подключаться к базе данных из внутреннего файла jar Передача приложения в AndroidViewModel JEXL3 – функция Эйлера Случай класса Kotlin не корректен Kotlin coroutines использует продукты и mockito, чтобы издеваться над производственной работой Kotlin: Как получить и установить текст в TextView на Android с помощью Kotlin?

Расширения в Котлине

Я хочу использовать расширения для переменных и метода для моего пользовательского класса. Я пытаюсь под кодом, но получаю ошибку

Локальные свойства расширения не допускаются

val Double.km: Double get() = this * 1000 val Double.m: Double get() = this val Double.cm: Double get() = this / 100 val Double.mm: Double get() = this / 1000 val Double.ft: Double get() = this / 3.28084 val oneInch = 25.4.mm println("One inch is $oneInch meters") // prints "One inch is 0.0254 meters" val threeFeet = 3.0.ft println("Three feet is $threeFeet meters") // prints "Three feet is 0.914399970739201 meters" 

Как использовать расширения? Можем ли мы использовать расширения в интерфейсе?

Вы должны переместить эти объявления из тела функции в тело класса. Подобно состояниям ошибок, не разрешается локально определять свойства расширения, а методы локального расширения – в порядке.

Поэтому в вашем случае вы можете сделать:

 class MainClass { val Double.km: Double get() = this * 1000 val Double.m: Double get() = this val Double.cm: Double get() = this / 100 val Double.mm: Double get() = this / 1000 val Double.ft: Double get() = this / 3.28084 fun run() { val oneInch = 25.4.mm println("One inch is $oneInch meters") } } 

Вы можете использовать свойства расширения внутри вашего MainClass , в то время как внешнее использование невозможно.