【问题标题】:Can I add static extension fun for third-party class in kotlin? [duplicate]我可以在kotlin中为第三方类添加静态扩展乐趣吗? [复制]
【发布时间】:2021-01-27 03:23:19
【问题描述】:

给定一个第三方类ThirdClass,它没有伴生对象,我该如何为它定义一个静态扩展函数?像这样的:

fun ThirdClass.Companion.hello(){}

【问题讨论】:

  • AFAIK 你不能扩展没有companion 对象的对象(还)。
  • 你在解决什么问题?请展示一些用例

标签: kotlin


【解决方案1】:

我认为您需要的是在标记为伴侣的类中声明一个对象,例如 link

class MyClass {
    companion object Factory {
        fun create(): MyClass = MyClass()
    }
}

可以通过简单地使用类名作为限定符来调用伴生对象的成员:

val instance = MyClass.create()

【讨论】:

    【解决方案2】:

    你不能在类定义之外声明一个静态函数,但你可以创建一个适用于所有实例的扩展函数:

    fun ThirdClass.hello() = println("Hello from ${this.javaClass.name}!")
    
    fun main() {
        ThirdClass().hello()
    }
    

    输出:

    Hello from ThirdClass!
    

    【讨论】:

      【解决方案3】:

      目前还没有,但它在 KT-11968: Adding statically accessible members to an existing Java class via extensions 下被跟踪(尽管名称如此,讨论也涵盖了没有同伴的 Kotlin 类/接口)。请特别查看以here 开头的 cmets。

      【讨论】:

        猜你喜欢
        • 2018-09-25
        • 2010-09-19
        • 2019-06-27
        • 1970-01-01
        • 2013-07-16
        • 2015-05-20
        • 2017-12-23
        相关资源
        最近更新 更多