2017-01-03 7 views
1

パッケージjava.util.LinkedListでは、1つの静的クラスとして定義されたクラスノードが必要ですか?目標は何ですか?クラスLinkedListのNodeが静的であるが正常ではないクラスとして定義されている

ソースコードはpageから見つけることができます。

+0

'List 'の 'Node 'は、他の 'List 'のノードと同じ型になる可能性があるので、静的です。型は単一の 'List 'インスタンスに束縛される必要はありません。 –

+0

@PatrickParkerありがとう、それは役に立ちます。 – Ivan

答えて

3

スタティックネストクラスのインスタンスは、ネストクラスのインスタンスへの参照を持たない。基本的には別のファイルに置くのと同じですが、ネストされたクラスとの結束が高い場合、それらをネストされたクラスとして持つことは良い選択です。

ただし、静的でないネストされたクラスは作成するネストクラスのインスタンスを必要とし、インスタンスはそのインスタンスにバインドされ、そのフィールドにアクセスできます。 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実装の実装の詳細であり、そのクラス外では使用できません。だから静的なネストされたクラスを作ることが最も賢明なデザインの選択でした。

+0

この例をお寄せいただき、ありがとうございます。ノードタイプは、単一のリストインスタンスにバインドする必要はありません。 – Ivan

関連する問題