我们目前正在将项目切换到Kotlin,并遇到以下问题:
我们仅在给定的类内需要某个扩展功能。因此,我们有两种可能性:(1)在文件顶层声明扩展函数private
或(2)在类内部声明扩展函数private
。
跟随MCVE:
顶级示例(文件C1.kt
):
private fun String.double() = this.repeat(2)
class C1 {
init {
println("init".double())
}
}
内部类示例(文件
C2.kt
):class C2 {
private fun String.double() = this.repeat(2)
init {
println("init".double())
}
}
问题:
C1.kt
中,扩展功能String.double()
对其他可能的文件成员(例如同一文件中的其他类)也可见? C2
的结构吗? 最佳答案
有一个区别:在类中指定扩展函数时(在示例C2
中),然后您还可以使用qualified this
语法(在示例this@C2
中)访问此类的实例。
这是个好问题。就个人而言,我会将扩展功能放在类之外,因为扩展功能(通常)会指定与扩展类型有关的行为,而不是与使用它们的类的类型有关的行为。但是,如果您确实需要扩展功能中与类相关的信息,则可以在类中指定它们。
关于kotlin - 私有(private)顶级扩展功能与类内部的私有(private)扩展功能之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54782787/