2017-04-03 48 views
2

我对kotlin很新颖,我想知道是否有可能,以及如果违反了最佳实践,从伴随对象中访问伴随对象之外的方法和变量。伴随对象之外的访问方法 - Kotlin

例如

class A { 
    fun doStuff(): Boolean = return true 

    companion object{ 
     public fun stuffDone(): Boolean = return doStuff() 
    } 
} 

或类似的东西

谢谢

+0

是'doStuff'在顶层或拥有同伴对象的类中定义? – marstran

回答

9

doStuff()是一个类的实例方法;调用它需要一个类实例。伴随对象的成员,就像Java中的静态方法一样,没有范围内的类实例。因此,呼叫从一个同伴对象方法的实例方法,你需要明确提供一个实例:

class A { 
    fun doStuff() = true 

    companion object { 
     fun stuffDone(a: A) = a.doStuff() 
    } 
} 
+0

谢谢,所以如果我想以静态方式访问它,我可以把doStuff()放在伴随对象中。但是这会让它公开吗? –

+0

是的,你可以做到这一点。无论您是在类中还是在伴侣对象中定义它们,Kotlin中的所有成员都是默认公开的。如果你不想让它公开,只需添加一个'private'修饰符。 – yole

+0

谢谢,现在很清楚 –