JavaでGraph<E>
というインターフェイスを実装する必要があります。内部クラスを使用してJava /内部メソッドの外部クラスのプライベートレコードを作成する可視性
たとえば、MyGraph<E extends Comparable<E>>
はGraphを実装するためのクラスです。
タイプE
の要素を「カプセル化」するために、内部クラスNode
を作成します。
public class MyGraph<E extends Comparable<E>> implements Graph<E>{
MyGraph methods and instance variables...
.
.
.
class Node {
E elem;
List<E> edges;
...
public Node(E e){
this.elem = e;
edges = null;
}
}
}
問題は、それのインスタンス変数がpublic
またはprivate
宣言する必要がある場合は内部クラスはNode
またはNode<E>
、public
またはprivate
であるべきであれば、私は理解できないです。そして、私はNode
に挿入する予定のいくつかのメソッドについても同様です。
基本的クラスノードは、(typedef
と)Cレコード・タイプのようでなければならず、外部クラスは、オブザーバーなしゲッターをノードのすべてのインスタンス変数にアクセスすることができなければならない、など
'Node'は' MyGraph'定義の一部であり、外部クラスによってアクセス可能で変更可能であってはならないため、 'private'クラスである必要があります。あなたはあなたのグラフの一部である、あなたのノードでいくつかの計算を行っています。すでにパラメータ化されたクラス(つまり、MyGraph)のようにパラメータ化する必要はありません。 JavaのPrinceton on Algorithmsの優れたリソースをご覧くださいhttp://algs4.cs.princeton.edu/home/ –
Stefan
Nodeクラスのメンバーにアクセスする必要がないため、Nodeクラス 'private static'を宣言する必要があります外側の階級。これをしないと、すべてのインスタンスはインスタンス化するインスタンスへの参照を持ちます。これを行うにはパラメータを与える必要があります。 _E_をパラメータ名として使用すると、外部クラスの_E_がシャドウされるので、明確にするために別の名前を付けることを検討してください。あなたの外部クラスは 'Node'のメンバーに完全なアクセス権を持ち、' Node'がプライベートであれば他のクラスはアクセスできませんので、メンバーのアクセスレベルを気にする必要はありません。 – teppic
@teppic "これをしなければ、すべてのインスタンスはインスタンス化するインスタンスへの参照を持ちます"という意味はどういう意味ですか? –