なぜConcurrentHashMap.Segment
とConcurrentHashMap.HashEntry
クラスは静的ですか? なぜこのように設計されていますか?ConcurrentHashMap.SegmentクラスとConcurrentHashMap.HashEntryクラスが静的である理由は何ですか?
答えて
@Andreyあなたが提示した点に同意しますが、私が効果的なJavaブックから得た本当の答えに同意します。 Item#22静的メンバークラスを非静的クラスよりも優先します。
プライベート静的メンバクラスの一般的な用途は、値を持つキーを関連付けるマップインスタンスを、その封入class.For 例によって表されるオブジェクトの 成分を表す考慮することです。 マップの多くのマップ実装では、マップ内の各 のキーと値のペアの内部Entryオブジェクトがあります。各エントリはマップに関連付けられていますが、 エントリのメソッド(getKey、getValue、およびsetValue)には、 のマップへのアクセスは必要ありません。したがって、エントリを表すために非静的な メンバクラスを使用するのは無駄でしょう。プライベートな静的メンバクラスは が最適です。
あなたはこの修飾子を省略し、常にそのdeclaration.Ifにstatic修飾子を入れて、 親インスタンスへのアクセスを必要としないメンバーのクラスを宣言した場合、各インスタンスは その親インスタンス
に無関係な参照を持っています
たくさんもっと良いもの私は22番のアイテムから得たものが主なポイントです。
基本的に、それらの囲むクラスのプロパティを使用する必要のないすべての内部クラスは、static
となっています。これは、すべてのオブジェクトが可能な限り最小限のオブジェクトにアクセスできるようにするというJavaの一般原則から来ています。
各インナー非静的クラスは、エンティティ(Segment
又はHashEntry
)当たり8バイトのオーバーヘッドを作成し、親オブジェクト(ConcurrentHashMap
)です参照不可視フィールドthis$
を含有します。これは、親クラスのフィールドにアクセスする方法です。内部クラスは、単一のコンテナ(親など)に属するオブジェクトのシンタックスシュガーです。
このため、可能であれば、内部クラスを静的内部クラスに置き換える必要があります。
インナースタティッククラスは、遅延ロードのように1つの美しい機能を持っています。具体的には、Bill Pugh Singleton実装では、シングルトンパターンを実装します。
静的内部クラスが提供するその他の機能は、外部インスタンス変数にアクセスできないことです。ここからは、非静的メソッドにもアクセスできません。その静的クラスを初期化するために個別のインスタンスを作成する必要はありません。直接ClassName.InnerStaticClass.method()
を使用して、メソッドを呼び出すことができます。
- 1. 関数内の静的な記憶クラスとその理由は何ですか?
- 2. このように「静的」クラスを使用する理由は何ですか?
- 3. 期待されるインスタンス 'user'がクラスである理由は何ですか?
- 4. パフォーマンスは、シングルトンクラスまたは静的クラスを持つ十分な理由ですか?
- 5. Androidのアダプターは、静的内部クラスまたは非静的内部クラスである必要があります
- 6. ここで静的な理由は何ですか?
- 7. ディレクティブがクラスを設定しない理由は何ですか?
- 8. 静的クラスと静的メソッド
- 9. 静的メソッドのみを持つクラスは静的であるべきですか?
- 10. EDMクラスが部分クラスである理由
- 11. 静的クラスのメモリ管理
- 12. クラスC++での非静的マルチスレッド処理
- 13. 静的クラス内でのラッピングセッション処理
- 14. rubyのクラス/静的メソッドでの使用は何ですか?
- 15. Spring MVCでModelクラス(model.addAttribute())を使う理由は何ですか?
- 16. Javaの静的ネストされたクラスは何ですか?
- 17. C#の静的クラス、賛否両論は何ですか?
- 18. 静的クラスとシングルトン
- 19. 静的クラスとシングルトン
- 20. クラスと静的メソッド
- 21. ConfigurationManagerと静的クラス
- 22. Swiftでは、シングルトンとクラスの静的バージョンの違いは何ですか?
- 23. 永続クラスの複数パラメータコンストラクタの理由は何ですか?
- 24. ビットフィールドがクラスの静的データメンバーとして許可されない理由
- 25. パッケージ保護クラスのパブリックメソッドには何らかの理由がありますか?
- 26. ジャクソン - @classのキーがあり、その値はクラスのフルパスです - 何らかの理由がありますか?
- 27. XAML経由で静的クラス内の静的メソッドを呼び出す
- 28. クラスLinkedListのNodeが静的であるが正常ではないクラスとして定義されている
- 29. C++静的クラスと非静的クラスのメンバ
- 30. 静的クラスはPhpStorm
でも、他のクラスから内部クラスにアクセスする可能性が1つ追加されます。 – Vipin
「** it **」とは何を参照していますか? –
"it"は、これらのクラスの現在の実装を意味します。現在のセグメントのシグネチャは "static final class Segment ReentrantLockはSerializablを実装しています" –
Vipin