アロハ! Kotling Language Referenceを読んでいるうちに、クラスのプロパティのキーワード "private"が使用されていないことがわかりました(常にデフォルトのpublicです)。ゲッタとセッタは自動的に生成されるとも述べています。 私はクラスを作成し、そのフィールドを非公開にしました。しかし、クラスのオブジェクトを作成すると、フィールドを見ることができず、自分で記述しない限り、セッターやゲッターは使用できません。 ここにルールは何ですか?可視性修飾子をデフォルト(パブリック)のままにするか、非公開にしてミューテータメソッドを提供しますか? ありがとうございます。Kotlinのクラスのプロパティはプライベートでアクセスする必要がありますか?
2
A
答えて
10
プロパティの考え方は、フィールドとそのアクセサを単一のエンティティでカプセル化することです。クラスのプロパティを外部からアクセスして変更できるようにする必要がある場合は、そのプロパティを公開しておく必要があります。外部から読み取ることはできるが更新はできないようにする必要がある場合は、プライベートアクセサを使用してパブリックプロパティを定義することができます。
デフォルトアクセサーをカスタムクラスに変更しても、クラスのクライアントには影響しません。コンパイラーは常にアクセサメソッドを生成し、クラスのクライアントはそれらのメソッドを使用し、直接。
プロパティアクセサーとは別の明示的なゲッターメソッドまたはミューテータメソッドを記述しないでください。
関連する問題
- 1. @Singletonクラス私はコンストラクタをプライベートにする必要がありますか?
- 2. プライベートクラスはプロパティによってアクセスする必要がありますか?
- 3. スウィフト - プロパティのデフォルト値を親クラスにする必要がありますか?
- 4. プロパティ 'currentUrlTree'はプライベートで、 'Router'クラス内でのみアクセス可能です
- 5. kotlinでは、プライマリコンストラクタのプロパティのセッタをプライベートにする方法は?
- 6. angular2は親クラスの子値にアクセスする必要があります
- 7. Kotlinのコンストラクタパラメータでval/varが必要な状況はありますか?
- 8. Kotlinにライブラリをインストールする必要があります。
- 9. SwiftのdidSetアクセサでは、まだプロパティへのアクセスを非表示にする必要がありますか?
- 10. 子クラスフォーム親クラス(UIButton)のプロパティをオーバーライドする必要があります
- 11. サービス層はHttpContextにアクセスする必要がありますか?
- 12. Model.Is ___ - プロパティまたはメソッドである必要がありますか?
- 13. プロパティをクラスの例外プロパティに移動する "System.InvalidCastException: 'オブジェクトはIConvertibleを実装する必要があります。'"
- 14. コンストラクタをプライベートまたはパブリックにコピーする必要があります
- 15. すべての.swiftファイルがクラスである必要はありませんか?
- 16. KotlinにはJDKが必要ですか?
- 17. GraphQLオブジェクトのプロパティは文字列のリストである必要があります
- 18. CloudFormationエラー:プロパティの値NetworkInterfacesはオブジェクトのリストである必要があります
- 19. OOP Javascript:プライベート関数をクラスプロトタイプに追加する必要がありますか?
- 20. SafeValueは、[プロパティ]を使用する必要があります=バインディング:
- 21. プロパティでメソッドを定義する必要があります
- 22. 派生クラスは、基本クラスのstaticメソッドをオーバーライドされたプロパティで呼び出す必要があります
- 23. False未使用の「プライベート」メソッドを削除する必要があります
- 24. KotlinファイルをAndroidの別のソースディレクトリに置く必要がありますか?
- 25. プライベート内部クラスにアクセス修飾子を宣言する必要が
- 26. クラスはpublicであり、宣言する必要があります
- 27. コントローラから指示にアクセスする必要があります
- 28. 引数はクラスStMoMoDataのものである必要があります
- 29. enumクラスのプロパティでフィルタリングするKotlin
- 30. 内部クラスをユニットテストする必要がありますか?
したがって、実際に直接権利を得ることは事実上不可能ですか?そして私はいつもそれらを公開しておくのが安全ですか? (私はすべてがプライベートでなければならないjavaから来た)内部についてどうですか? – Sermilion
「直接物件に行く」とはどういう意味ですか?プロパティのバッキングフィールドは、リフレクションによってのみアクセスできます。プロパティが同じモジュールからのみアクセスされる場合は、 'internal'可視性を使用するべきです。 – yole
私はJavaのように、フィールドをパブリックにすると、getterとsetterを使わずにアクセスできますが、これはうまくありません。しかし、私は今それを得ました、ありがとう。 – Sermilion