在 Kotlin 中声明函数的方式之间的区别
Differenence between ways to declare functions in Kotlin
我看到了一些声明函数的代码,如下所示。 fun1
和 fun2
有什么区别?
interface Test {
fun fun1() : Boolean = false
}
fun Test.fun2() : Boolean = true
第二个版本是一个扩展功能。
不同之处在于扩展函数可以应用于任何类型(甚至在您的代码之外),但它们无权访问该类型的私有成员。它们与使用此类型作为第一个参数调用函数几乎相同,只是语法更好
接口内部定义的 fun1
描述了接口的任何实现者都可以覆盖的开放函数。由于它还通过返回某些内容来定义默认实现,因此它不是抽象的并且实现 类 可以选择不覆盖它。
fun2
是一个扩展函数。当这些与接口一起使用时,通常的原因是不鼓励覆盖。扩展函数不能被覆盖,但它可以被另一个具有相同签名的扩展函数隐藏,但只能在特定范围内。因此,另一个模块中 Test
的某些实现者将其实例传回此模块不能更改此模块中使用的 fun2
的功能。
我看到了一些声明函数的代码,如下所示。 fun1
和 fun2
有什么区别?
interface Test {
fun fun1() : Boolean = false
}
fun Test.fun2() : Boolean = true
第二个版本是一个扩展功能。
不同之处在于扩展函数可以应用于任何类型(甚至在您的代码之外),但它们无权访问该类型的私有成员。它们与使用此类型作为第一个参数调用函数几乎相同,只是语法更好
fun1
描述了接口的任何实现者都可以覆盖的开放函数。由于它还通过返回某些内容来定义默认实现,因此它不是抽象的并且实现 类 可以选择不覆盖它。
fun2
是一个扩展函数。当这些与接口一起使用时,通常的原因是不鼓励覆盖。扩展函数不能被覆盖,但它可以被另一个具有相同签名的扩展函数隐藏,但只能在特定范围内。因此,另一个模块中 Test
的某些实现者将其实例传回此模块不能更改此模块中使用的 fun2
的功能。