在 Kotlin 中,如果我在伴生对象中有一个以Companion.
() 为前缀的函数,那么与伴生对象内部的函数Companion.foo
相比,它会有什么不同foo
?
我注意到在下面的代码中,Companion.foo
它将使它对外部范围不可见,但对同一个伴随对象内的函数仍然可见。
您可以在以下位置找到代码片段:https ://pl.kotl.in/t6FvM6ni6
fun main() {
A.foo() // compiler complains "unresolved reference"
A.bar()
B.foo()
}
class A {
companion object {
fun Companion.foo() {
println("hello in A")
}
fun bar() {
foo()
}
}
}
class B {
companion object {
fun foo() {
println("hello in B")
}
}
}
还有其他区别吗?除了能见度之外是否A.Companion.foo
和一样?A.foo
这是一种将方法封装在伴生对象中的方法吗?
更新 1
在我的实际项目中,我从伴随对象中的inline
另一个inline
函数调用一个函数,这就是不能使用访问修饰符的原因。但如果可能的话,我仍然想隐藏起来foo
。
class C {
companion object {
inline fun <reified T> Companion.foo() {
println("hello in A")
}
inline fun bar() {
foo<String>()
}
}
}