2017-04-03 59 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

謝謝,現在很清楚 –