web-dev-qa-db-ja.com

コンパニオンオブジェクト外のメソッドへのアクセス-Kotlin

私はkotlinにかなり慣れていないので、それが可能かどうか、また、コンパニオンオブジェクト内から、コンパニオンオブジェクトの外部にあるメソッドや変数にアクセスすることはベストプラクティスに反するのかどうか疑問に思いました。

例えば

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

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

またはそのようなもの

ありがとうございました

10

doStuff()はクラスのインスタンスメソッドです。それを呼び出すにはクラスインスタンスが必要です。コンパニオンオブジェクトのメンバーは、Javaの静的メソッドと同様に、スコープ内にクラスインスタンスを持ちません。したがって、コンパニオンオブジェクトメソッドからインスタンスメソッドを呼び出すには、インスタンスを明示的に指定する必要があります。

class A {
    fun doStuff() = true

    companion object {
        fun stuffDone(a: A) = a.doStuff() 
    }
}
22
yole

コンパニオンオブジェクトブロックの外部にある関数を呼び出すこともできます。

class A {
    fun doStuff() = true

    companion object {
        val a = A()
        fun stuffDone() = a.doStuff() 
    }
}
0
Uddhav Gautam