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

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

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" 
  • Что означает «. ()» В Котлине?
  • Экземпляр Kotlin KClass внутри функции расширения
  • Могут ли функции расширения быть вызваны «статическим» способом?
  • Объяснить эту структуру функций Котлина
  • Kotlin: Как я могу создать «статическую» наследуемую функцию?
  • Объявление функции Kotlin: знак равенства перед фигурными скобками
  • Настройка привязок Guice в Котлине
  • Превознесение Клейсли в Котлине
  • Могу ли я иметь другой тип возврата в котлин?
  • Доступ к функциям расширения Kotlin из Java
  • Как проверить лямбда-пустоту в котлине
  • Interesting Posts

    Невозможно настроить Realm в проекте с помощью Kotlin

    Создать новый экземпляр объекта Котлин

    Kotlin, когда несколько значений не работают, когда значение представляет собой вид android

    Как поместить элемент на карту и вернуть карту

    Почему Anko не может игнорировать переданное значение _id, когда _id является INTEGER + PRIMARY_KEY + AUTOINCREMENT?

    @CreationTimestamp и @UpdateTimestamp не работают в Котлине

    Kotlin / Java, строковый массив еще не инициализирован при вызове метода

    Как правильно реализовать lateinit с пользовательскими объектами класса для использования в onCreate () в android, избегая ошибки Property getter или setter expected

    Объявление поля статического интерфейса в Котлине

    Уведомление Действие не срабатывает PendingIntent

    Модуль библиотеки Android Kotlin экспортируется с плагином gradene maven-publish, не добавляющим зависимости

    IllegalAccessError при использовании Instant Run с Kotlin

    Какова цель пустого класса в Котлине?

    Android Dagger: я не могу предоставить внешний класс без конструктора @Inject

    Возврат из forEachLine

    Давайте будем гением компьютера.