Добавить функцию расширения в kotlin для всех классов - PullRequest
3 голосов
/ 20 марта 2019

Можно ли добавить функцию расширения для всех классов? Я думал о добавлении его в некоторый общий базовый класс, такой как Object. Возможно ли это?

Ответы [ 2 ]

5 голосов
/ 20 марта 2019

В Kotlin Any - это супер тип, такой как Object для Java.

fun Any.myExtensionFunction() {
    // ...
}

И если вы хотите поддерживать нуль-приемник тоже:

fun Any?.myExtensionFunction() {
    // ...
}
2 голосов
/ 20 марта 2019

Это зависит от того, хотите ли вы использовать тип объекта в подписи (либо в другом аргументе, либо в типе возвращаемого значения). Если нет, используйте Any(?), как сказано в ответе Кевина Робателя; но если вы это сделаете, вам нужно использовать дженерики, например, (из стандартной библиотеки)

inline fun <T, R> T.run(block: T.() -> R): R

inline fun <T> T.takeIf(predicate: (T) -> Boolean): T?

и т.д.

...