【问题标题】:Differenence between ways to declare functions in Kotlin在 Kotlin 中声明函数的方式之间的区别
【发布时间】:2022-01-08 22:46:20
【问题描述】:

我看到了一些代码声明函数,如下所示。 fun1fun2有什么区别?

interface Test {
    fun fun1() : Boolean = false
}

fun Test.fun2() : Boolean = true

【问题讨论】:

    标签: kotlin extension-methods


    【解决方案1】:

    在接口内部定义的fun1 描述了一个开放函数,该接口的任何实现者都可以覆盖该函数。由于它还通过返回一些东西定义了一个默认实现,所以它不是抽象的,实现类可以选择不覆盖它。

    fun2 是一个扩展函数。当这些与接口一起使用时,通常是为了阻止覆盖。扩展函数不能被覆盖,但它可以被具有相同签名的另一个扩展函数隐藏,但只能在特定范围内。因此,另一个模块中Test 的某些实现者将其实例传递回此模块,无法更改此模块中使用的fun2 的功能。

    【讨论】:

      【解决方案2】:

      第二个版本是扩展功能。

      不同之处在于扩展函数可以应用于任何类型(甚至在您的代码之外),但它们无法访问该类型的私有成员。它们与以这种类型作为第一个参数的调用函数几乎相同,只是语法更好

      【讨论】:

        猜你喜欢
        • 2011-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-20
        • 2010-10-10
        • 2015-04-22
        • 2011-09-29
        • 1970-01-01
        相关资源
        最近更新 更多