我必须在Java中实现一个名为Graph<E>
的接口。
假设MyGraph<E extends Comparable<E>>
是我正在编写的实现Graph的类。
我想创建一个内部类Node
,以便"封装"类型E
的元素。
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;
}
}
}
问题是我无法理解内部类是否应该是Node
或Node<E>
, public
或private
,以及它的实例变量是否应该声明为public
或private
。对于我将在Node
中插入的一些最终方法也是如此。
基本上类Node应该像C中的记录类型(使用typedef
),外部类应该能够访问Node 的所有实例变量,而不需要观察者, getter等
您应该将Node类声明为私有静态,因为它不需要访问外部类的成员。如果不这样做,每个实例都将携带对实例化实例的引用。您需要为它提供一个参数来执行此操作。
如果您使用E作为参数名,它将遮蔽外部类中的E,因此为了清晰起见,请考虑给它一个不同的名称。您的外部类将拥有对Node成员的完全访问权限,如果Node是私有的,则没有其他类具有访问权限,因此您无需担心成员的访问级别—只需省略它们即可。