【发布时间】:2021-01-27 03:23:19
【问题描述】:
给定一个第三方类ThirdClass,它没有伴生对象,我该如何为它定义一个静态扩展函数?像这样的:
fun ThirdClass.Companion.hello(){}
【问题讨论】:
-
AFAIK 你不能扩展没有
companion对象的对象(还)。 -
你在解决什么问题?请展示一些用例
标签: kotlin
给定一个第三方类ThirdClass,它没有伴生对象,我该如何为它定义一个静态扩展函数?像这样的:
fun ThirdClass.Companion.hello(){}
【问题讨论】:
companion 对象的对象(还)。
标签: kotlin
我认为您需要的是在标记为伴侣的类中声明一个对象,例如 link。
class MyClass {
companion object Factory {
fun create(): MyClass = MyClass()
}
}
可以通过简单地使用类名作为限定符来调用伴生对象的成员:
val instance = MyClass.create()
【讨论】:
你不能在类定义之外声明一个静态函数,但你可以创建一个适用于所有实例的扩展函数:
fun ThirdClass.hello() = println("Hello from ${this.javaClass.name}!")
fun main() {
ThirdClass().hello()
}
输出:
Hello from ThirdClass!
【讨论】:
目前还没有,但它在 KT-11968: Adding statically accessible members to an existing Java class via extensions 下被跟踪(尽管名称如此,讨论也涵盖了没有同伴的 Kotlin 类/接口)。请特别查看以here 开头的 cmets。
【讨论】: