是否可以向所有类添加扩展功能?我正在考虑将其添加到一些常见的基类(如Object)中。有可能吗?
答案 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?
等