将Kotlin中的扩展功能添加到所有类

时间:2019-03-20 16:04:25

标签: kotlin extension-methods kotlin-extension

是否可以向所有类添加扩展功能?我正在考虑将其添加到一些常见的基类(如Object)中。有可能吗?

2 个答案:

答案 0 :(得分:5)

对于Kotlin,Any是超级类型,例如Java的Object

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

如果您也想支持null接收器:

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

答案 1 :(得分:2)

这取决于您是否要在签名中使用对象的类型(在另一个参数中或在返回类型中)。如果没有,请按照凯文·罗伯特(Kevin Robatel)的回答所述使用Any(?);但如果这样做,则需要使用泛型,例如(来自标准库)

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

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