Доступ к статической функции расширения из другого класса в Kotlin?
Допустим, у нас есть следующая функция расширения:
class Helper {
companion object {
fun Int.plus(value: String) = Integer.valueOf(value).plus(this)
}
}
Как вы можете получить доступ к plus
Функция расширения от Helper
класс в другом классе. Есть ли способ, где мы можем сделать что-то вроде этого, например:
class OtherClass {
fun someMethod() {
val eight = 7.Helper.Companion.plus("1")
}
}
2 ответа
В вашем примере Int.plus(value: String)
является функцией-членом Helper.Companion
объект (факт, что это объект-компаньон или что он находится внутри другого класса, не имеет значения). Этот случай описан в разделе " Объявление расширений в качестве участников " документации.
Короче говоря, для доступа к функции с двумя приемниками (дополнительный приемник типа Int
и диспетчер отправки типа Helper.Companion
) вы должны иметь их обоих в объеме.
Это может быть достигнуто несколькими способами:
with(Helper.Companion) {
239.plus("")
}
или же
with(Helper.Companion) {
with(239) {
plus("")
}
}
PS Помещение функции расширения в объект-компаньон очень нерегулярно и не идиоматично. Я не могу себе представить, зачем вам это нужно.
Расширение объявлено как это member extension function
и будет виден только внутри Helper
учебный класс. Если вам нужно получить доступ к нему за пределами этого класса, поместите его в более широкую область, например, сделайте его функцией верхнего уровня. В качестве альтернативы вы можете сделать ее обычной функцией, которая принимает два параметра, если вы хотите сохранить ее в классе.
В качестве дополнительной подсказки вы можете отметить эту функцию как operator
если вы хотите использовать его с +
условное обозначение:
operator fun Int.plus(value: String) = Integer.valueOf(value) + this
val x = 2 + "25"