【发布时间】:2019-12-16 11:43:41
【问题描述】:
如何从对象外部调用嵌套在对象内部的扩展函数?
这是一个例子:
package test
object Example {
fun String.exampleExtension() {
}
}
fun test(str: String) {
str.exampleExtension() // Doesn't work. How can I use that extension function?
}
据我所知这是不可能的,但我不确定,所以我想我会问。
【问题讨论】:
-
除非扩展依赖于存储在您的(单例)示例对象中的全局状态,否则它没有理由不应该是顶级函数。没有必要在 Example 中嵌套它。
-
我明白你为什么会这么想,但是我遇到了其他有用的用例。即,当使用像github.com/ScottPierce/kotlin-html 这样的无状态 DSL,并且您想将 DSL 使用拆分为可重用的函数时,我发现这样的方法是必要的,否则我最终会遇到私有函数的命名冲突。