Доступ к статической функции расширения из другого класса в Котлине?

Допустим, у нас есть следующая функция расширения:

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") } 

}

В вашем примере Int.plus(value: String) является функцией- Helper.Companion объекта 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" 
  • Как сделать возвращаемый тип функции переопределения одного выражения для Unit?
  • Как получить доступ к членам класса с таким же именем в функции расширения в Kotlin android
  • Kotlin: получить ссылку на функцию экземпляра класса
  • Функция расширения Kotlin
  • Могу ли я иметь другой тип возврата в котлин?
  • Могут ли функции расширения быть вызваны «статическим» способом?
  • Как проверить лямбда-пустоту в котлине
  • Есть ли способ показать все функции расширения данного класса Kotlin в Intellij IDE?
  • перегрузка + и + = операторов для «классов номеров»
  • Объявление функции Kotlin: знак равенства перед фигурными скобками
  • Доступ к функциям расширения Kotlin из Java
  • Давайте будем гением компьютера.