2016-07-12 15 views
2

アロハ! Kotling Language Referenceを読んでいるうちに、クラスのプロパティのキーワード "private"が使用されていないことがわかりました(常にデフォルトのpublicです)。ゲッタとセッタは自動的に生成されるとも述べています。 私はクラスを作成し、そのフィールドを非公開にしました。しかし、クラスのオブジェクトを作成すると、フィールドを見ることができず、自分で記述しない限り、セッターやゲッターは使用できません。 ここにルールは何ですか?可視性修飾子をデフォルト(パブリック)のままにするか、非公開にしてミューテータメソッドを提供しますか? ありがとうございます。Kotlinのクラスのプロパティはプライベートでアクセスする必要がありますか?

答えて

10

プロパティの考え方は、フィールドとそのアクセサを単一のエンティティでカプセル化することです。クラスのプロパティを外部からアクセスして変更できるようにする必要がある場合は、そのプロパティを公開しておく必要があります。外部から読み取ることはできるが更新はできないようにする必要がある場合は、プライベートアクセサを使用してパブリックプロパティを定義することができます。

デフォルトアクセサーをカスタムクラスに変更しても、クラスのクライアントには影響しません。コンパイラーは常にアクセサメソッドを生成し、クラスのクライアントはそれらのメソッドを使用し、直接。

プロパティアクセサーとは別の明示的なゲッターメソッドまたはミューテータメソッドを記述しないでください。

+0

したがって、実際に直接権利を得ることは事実上不可能ですか?そして私はいつもそれらを公開しておくのが安全ですか? (私はすべてがプライベートでなければならないjavaから来た)内部についてどうですか? – Sermilion

+0

「直接物件に行く」とはどういう意味ですか?プロパティのバッキングフィールドは、リフレクションによってのみアクセスできます。プロパティが同じモジュールからのみアクセスされる場合は、 'internal'可視性を使用するべきです。 – yole

+0

私はJavaのように、フィールドをパブリックにすると、getterとsetterを使わずにアクセスできますが、これはうまくありません。しかし、私は今それを得ました、ありがとう。 – Sermilion

関連する問題