パッケージjava.util.LinkedListでは、1つの静的クラスとして定義されたクラスノードが必要ですか?目標は何ですか?クラスLinkedListのNodeが静的であるが正常ではないクラスとして定義されている
ソースコードはpageから見つけることができます。
パッケージjava.util.LinkedListでは、1つの静的クラスとして定義されたクラスノードが必要ですか?目標は何ですか?クラスLinkedListのNodeが静的であるが正常ではないクラスとして定義されている
ソースコードはpageから見つけることができます。
スタティックネストクラスのインスタンスは、ネストクラスのインスタンスへの参照を持たない。基本的には別のファイルに置くのと同じですが、ネストされたクラスとの結束が高い場合、それらをネストされたクラスとして持つことは良い選択です。
ただし、静的でないネストされたクラスは作成するネストクラスのインスタンスを必要とし、インスタンスはそのインスタンスにバインドされ、そのフィールドにアクセスできます。 StaticExample
直接インスタンス化が、ネストクラスMain
のインスタンスフィールドへのアクセスを有することができない
public class Main{
private String aField = "test";
public static void main(String... args) {
StaticExample x1 = new StaticExample();
System.out.println(x1.getField());
//does not compile:
// NonStaticExample x2 = new NonStaticExample();
Main m1 = new Main();
NonStaticExample x2 = m1.new NonStaticExample();
System.out.println(x2.getField());
}
private static class StaticExample {
String getField(){
//does not compile
return aField;
}
}
private class NonStaticExample {
String getField(){
return aField;
}
}
静的クラス:
は、一例として、このクラスを取ります。 非スタティッククラスNonStaticExample
では、インスタンス化するためにMain
のインスタンスが必要で、インスタンスフィールドaField
にアクセスできます。
LinkedList
の例に戻って、基本的にはデザインの選択です。
Node
のインスタンスはLinkedListのフィールドにアクセスする必要はありませんが、別のファイルに配置することも意味がありません。ノードはLinkedList
実装の実装の詳細であり、そのクラス外では使用できません。だから静的なネストされたクラスを作ることが最も賢明なデザインの選択でした。
この例をお寄せいただき、ありがとうございます。ノード
'List'の 'Node 'は、他の 'List 'のノードと同じ型になる可能性があるので、静的です。型は単一の 'List 'インスタンスに束縛される必要はありません。 –
@PatrickParkerありがとう、それは役に立ちます。 – Ivan