web-dev-qa-db-ja.com

Kotlin:別のクラスからフィールドにアクセスする方法は?

package example

class Apple {
    val Apple_SIZE_KEY: String = "Apple_SIZE_KEY"
}

クラス:

package example

class Store {
     fun buy() {
      val SIZE = Apple.APPLE_SIZE_KEY
    }
}

エラー:

「Apple_SIZE_KEY」には「example.Apple」のプライベートアクセスがあります

しかし 公式ドキュメント は、可視性修飾子を指定しない場合、デフォルトでpublicが使用されることを説明しています。

上記のエラーが発生するのはなぜですか?

7
Malwinder Singh

あなたがやろうとしているのは、インスタンスを持たないクラスの値にアクセスすることです。次の3つのソリューションがあります。

package example

object Apple {
    val Apple_SIZE_KEY: String = "Apple_SIZE_KEY"
}

この方法では、objectsがKotlinで機能するため、インスタンスを作成する必要はありません。

次のようにクラスをインスタンス化することもできます。

package example

class Store {
     fun buy() {
      val SIZE = Apple().Apple_SIZE_KEY
    }
}

このソリューションでは、Appleのオブジェクトもありますが、Appleはクラスとして宣言されています。

3番目のオプションは、Javaの静的変数のように動作するコンパニオンオブジェクトです。

package example

class Apple {
    companion object {
        val Apple_SIZE_KEY: String = "Apple_SIZE_KEY"
    }
}

これをインスタンスレベルのプロパティではなくクラスレベルのプロパティにする場合は、 コンパニオンオブジェクト を使用できます。

class Apple {
    companion object {
        val Apple_SIZE_KEY: String = "Apple_SIZE_KEY"
    }
}

fun useAppleKey() {
    println(Apple.APPLE_SIZE_KEY)
}

現在持っているのはインスタンスプロパティで、次のように使用できます。

fun useInstanceProperty() {
    val Apple = Apple()
    println(Apple.APPLE_SIZE_KEY)
}
5
zsmb13