クラスを入れ子にしたときに得られる利点を探し求めています。これを行う方法については多くの例がありますが、別のクラス内でクラスを宣言する理由については何も見つかりません。私は新しく到着した「コード・コンプリート」に相談しましたが、そこには言及もありませんでした。私は読むのが難しいという欠点があるのがわかります。入れ子クラスにはどのような理由がありますか
答えて
通常、ネストされたクラスはそのコンテナクラスの機能をサポートするためだけに存在し、単独では実行可能ではありません。例えば、メインクラスのコンストラクタを管理しやすくするために、より多くの数の初期化パラメータを収集することができます。メインクラスをサポートする特殊なコレクションを継承することもできます。
意味的には、別のクラスとの違いはありませんが、ネストはクラスを単独で使用しないという明確なメッセージを送信します。
"[...]しかし、ネスティングはクラスが意味を持たないという明確なメッセージを送信します。"私が思うように重要なポイントです。 +1! – Gregor
親クラスにいくつかのモデルが必要ですが、それ以外のクラスはすべてではありません。内部表現/データのためのヘルパー。
私はたいていプライベートと宣言していますので、外部クラスの内部でのみ必要な機能に使用でき、不要な補助クラスの名前空間をきれいに保つことができます。
私の見解では、ネストクラスは必須ではありません。私は通常、小さなオブジェクトの場合にのみクラスをネストし、特定のクラスにのみ関連します。
入れ子になったクラスを作って終わるいくつかの設計上の決定があります
- 使用すると、2つのクラス間のより明確な関係を作りたいです。 a。名前が同じ名前空間内の2つのクラスのコンテキストサービングクラスで囲まれたトップレベルのネストしたクラスとして
- コンテキスト依存クラスが
- 「これらの事がtogheter行く」この依存関係が明確になることをより明示的である名前空間の汚染 を回避します
- は、ソースファイルの数を減らす
ので、入れ子になったクラスの背後にある2つの原則があります。依存とより良い組織が
外部クラスの実装に関わる概念をモデル化するためにネストされたクラスを使用するかもしれませんが、他のコンテキストでネストされたクラスを使用することは意味を持たないように、ネストされたクラスは、その公開APIの一部ではない可視性を持ち、外部クラスの詳細に明示的に依存することがあります。
一般的なパターンは、ネストされたクラスがパブリックインターフェイスを実装し、その外部クラスが戻り型がパブリックインターフェイスであるメソッドを介してネストされたクラスのインスタンスを公開することです。反復子パターンはこれの一例です。
- 1. JavaにはObjectクラスがあります。 Javascriptにはどのようなクラスがありますか?
- 2. 入れ子クラスはコンテナクラスからどのように継承されますか?
- 3. Unity JSにはどのようにクラスがありますか?
- 4. 挿入演算子のオーバーロードにはどのような問題がありますか? (<<演算子)
- 5. インターポーザークラスがコンパイルされない理由はありますか?
- 6. どのように入れ子になったクラスを行うと、クラス
- 7. パッケージ保護クラスのパブリックメソッドには何らかの理由がありますか?
- 8. 親クラスが子クラスにこのようなフィールドがあるかどうかを確認できますか?
- 9. サービスブローカがRESTORE DATABASEよりも無効になる理由はありますか
- 10. 入れ子になったクラスは、私はこのようになりますクラスを持つヘッダ
- 11. 抽象クラスのpublicコンストラクタには十分な理由があります
- 12. 2ページのログインプロセスの背景にはどのような理由がありますか?
- 13. find_if、for_each、countなどにstd ::が不要な理由はありますか?
- 14. 私のScalaのインストールは非常に遅いようですが、これには理由がありますか?
- 15. 抽象クラスのサブクラスにはどのような制約がありますか?
- 16. 入れ子セッション/トランザクションでTransaction.rollbackはどうなりますか?
- 17. 標準C++ライブラリにはどのような例外クラスがありますか
- 18. 私のクラスが受け入れられない理由
- 19. 親クラスには子クラスのクラスフィールドがありますか?
- 20. このような状況では、どのクラス名をジェネリックに挿入する必要がありますか?
- 21. ジャクソン - @classのキーがあり、その値はクラスのフルパスです - 何らかの理由がありますか?
- 22. この構文がクラスのインスタンス化に使用される特別な理由はありますか?
- 23. Java親クラスのある関数()にある変数は、子クラスがどのように使用しますか?
- 24. 入れ子の子プロセスはどのように追加されますか?
- 25. Web開発にはどのようなO/Sが好まれますか?その理由は何ですか?
- 26. parseIntの代わりにビット演算子を使用しないのが良い理由はありますか?
- 27. PyCharmは、どんな理由であれ
- 28. レジューサーは入れ子にする必要がありますか?
- 29. Setter.ValueがContentPropertyではないという理由がありますか?
- 30. アンドロイドにUINavigationControllerのようなuiクラスがありますか?
この質問は言語に依存しないものにすることができますか? – dfa