18

我对 kotlin 很陌生,我想知道这是否可能,以及从伴随对象内部访问伴随对象外部的方法和变量是否违反最佳实践。

例如

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

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

或类似的东西

谢谢

4

2 回答 2

35

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

class A {
    fun doStuff() = true

    companion object {
        fun stuffDone(a: A) = a.doStuff() 
    }
}
于 2017-04-03T09:17:04.233 回答
2

您还可以调用伴随对象块之外的函数。

class A {
    fun doStuff() = true

    companion object {
        val a = A()
        fun stuffDone() = a.doStuff() 
    }
}
于 2020-03-22T21:59:58.100 回答