为什么不能在Kotlin伴侣对象内部的对象在其他成员可以“静态”访问?

问题描述:

给定科特林同伴对象为什么不能在Kotlin伴侣对象内部的对象在其他成员可以“静态”访问?

class A { 
    companion object { 
     val a = 0 
     fun b() = 1 
     object C { 
      val d = 0 
     } 
    } 
} 

fun main(args: Array<String>) { 
    println(A.a) 
    println(A.b()) 
    println(A.C.d) // doesn't compile 
    println(A.Companion.C.d) 
} 

访问A.C当它是不是ab()为什么需要Companion

+0

你可以试试'@ JvmStatic' – EpicPandaForce

这样做的目的是为消除直接在类中声明的伴随对象中声明的对象的歧义。

请注意,类中定义的属性和函数与伴随对象中的属性和函数不是不明确的,因为前者只能在类的实例上调用。但是,一个嵌套的对象可以使用类名来引用:

class A { 
    object C { 
     val d = 0 
    } 
} 

println(A.C.d) 
+0

这最后(即对象的行为就像在这方面的嵌套类),我错过了一部分。 –