Как вы определяете метод статического расширения в Kotlin? Это вообще возможно? В настоящее время у меня есть метод расширения, как показано ниже.
public fun Uber.doMagic(context: Context) {
// ...
}
Вышеупомянутое расширение может быть вызвано на экземпляре.
uberInstance.doMagic(context) // Instance method
но как мне сделать это статическим методом, как показано ниже.
Uber.doMagic(context) // Static or class method
static-methods
kotlin
Рагунатх Джавахар
источник
источник
Ответы:
Для достижения
Uber.doMagic(context)
, вы можете написать расширение для компаньона объекта изUber
(требуется описание объекта спутника):источник
Вот что говорится в официальной документации:
Котлин статические методы
источник
У меня действительно был этот точный вопрос 30 минут назад, поэтому я начал копаться и не мог найти никакого решения или обходного пути для этого, НО во время поиска я нашел этот раздел на веб-сайте Kotlinglang, в котором говорится, что:
Тогда у меня возникла самая сумасшедшая идея, почему бы не определить функцию расширения с обнуляемым получателем (без фактического использования этого получателя), а затем вызвать ее для нулевого объекта! Я попробовал это, и это сработало довольно хорошо, но выглядело так ужасно. Это было так:
Поэтому я обошел это, создав val в моем файле расширений типа приемника со значением null, а затем использовал его в моем другом классе. Итак, в качестве примера, вот как я реализовал «статическую» функцию расширения для
Navigation
класса в Android: В моем файле NavigationExtensions.kt:В коде, который использует это:
Очевидно, что это не имя класса, это просто переменная типа класса, которая имеет нулевое значение. Это явно уродливо на стороне создателя расширений (потому что они должны создать переменную) и на стороне разработчика (потому что они должны использовать
SType
формат вместо фактического имени класса), но это самое близкое, что может быть достигнуто прямо сейчас по сравнению с реальными статическими функциями. Надеемся, что создатели языка Kotlin ответят на созданную проблему и добавят эту функцию в язык.источник
Вы можете создать статический метод с использованием объекта Companion, например:
и тогда вы можете назвать это как:
источник
platformStatic
аннотацию.platformStatic
был переименованJvmStatic
в текущий Котлин.Рекомендую посмотреть на эту ссылку. Как вы можете видеть, вы просто должны объявить метод на верхнем уровне пакета (файла):
Это равно
С константами все одинаково. Эта декларация
равно
источник
Мне также очень нравится иметь возможность добавлять статические методы расширения в Kotlin. В качестве временного решения я добавляю метод exntension к нескольким классам вместо использования одного метода статического расширения во всех них.
источник
Activity.isDeviceOnline(...)
не имея экземпляраActivity
.Чтобы создать метод расширения в kotlin, вы должны создать файл kotlin (не класс), а затем объявить свой метод в файле, например:
Импортируйте функцию в класс или файл, над которым вы работаете, и используйте ее.
источник