[解決済み】Javaで静的ネストされたクラス、なぜ?
質問
のJavaコードを見ていたら
LinkedList
で、静的なネストされたクラスが使われていることに気づきました。
Entry
.
public class LinkedList<E> ... {
...
private static class Entry<E> { ... }
}
通常のインナークラスではなく、静的なネストクラスを使用する理由は何でしょうか?
私が思いついた唯一の理由は、Entryはインスタンス変数にアクセスできないので、OOPの観点から見て、より良いカプセル化ができるということでした。
でも、他にも理由があるんじゃないかと思ったんです、パフォーマンスとか。それは何でしょうか?
注 私の用語が正しいことを願います。私はこれを静的インナークラスと呼びますが、これは間違いだと思います。 http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html
解決方法は?
リンク先のSunのページには、両者の主な相違点が書かれています。
<ブロッククオート
ネストされたクラスは、それを囲むクラスのメンバである。非静的ネストクラス(インナークラス)は、たとえプライベートと宣言されていても、エン クロージングクラスの他のメンバにアクセスすることができます。静的なネストされたクラスは、包含するクラスの他のメンバにアクセスすることはできません。
...
注:静的ネストされたクラスは、他のトップレベルクラスと同様に、その外側のクラス(および他のクラス)のインスタンスメンバーと対話することができます。 事実上、静的ネストされたクラスは、パッケージングの都合上、他のトップレベルクラスの中にネストされたトップレベルクラスという振る舞いになります。
は必要ありません。
LinkedList.Entry
をそのままトップレベルクラスとする
のみ
で使用される
LinkedList
(という名前の静的ネストされたクラスを持つ他のインターフェースもあります)。
Entry
などのように
Map.Entry
- と同じ概念です)。そして、LinkedListのメンバーにアクセスする必要がないので、静的であることは理にかなっており、よりクリーンなアプローチと言えます。
として Jon Skeetが指摘する ネストされたクラスを使用する場合、最初は静的で、その後、使用状況に応じて非静的である必要があるかどうかを決定するのがより良いアイデアだと思います。
関連
-
[解決済み] コレクションへの共有参照が見つかりました org.hibernate.HibernateException
-
[解決済み] ヘッドリカーシオンとテールリカーシオンの違い [重複]について
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み】なぜJavaの+=, -=, *=, /=複合代入演算子はキャスティングを必要としないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 環境変数JAVA_OPTSの使い方を教えてください。
-
[解決済み] Java UnknownFormatConversionException
-
[解決済み] 要素 'beans' の宣言が見つかりません。
-
[解決済み] javascriptでExpression言語を使うには?
-
[解決済み] JavaにおけるMouseListenerとMouseAdapterの違いについて
-
[解決済み] 文字列の長さに応じて文字列をトリミングする
-
[解決済み] Maven: assembly-pluginが全く実行されない
-
[解決済み] 文字列の巻き方
-
[解決済み] java.io.IOException。DER長の短い読み取り
-
[解決済み] ヘッドリカーシオンとテールリカーシオンの違い [重複]について