在 Kotlin 中声明函数的方式之间的区别

Differenence between ways to declare functions in Kotlin

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

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

fun Test.fun2() : Boolean = true

第二个版本是一个扩展功能。

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

接口内部定义的

fun1 描述了接口的任何实现者都可以覆盖的开放函数。由于它还通过返回某些内容来定义默认实现,因此它不是抽象的并且实现 类 可以选择不覆盖它。

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