在java /内部方法可见性中使用内部类为外部类创建私有记录



我必须在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;
        }
    }
}

问题是我无法理解内部类是否应该是NodeNode<E>, publicprivate,以及它的实例变量是否应该声明为publicprivate。对于我将在Node中插入的一些最终方法也是如此。

基本上类Node应该像C中的记录类型(使用typedef),外部类应该能够访问Node 的所有实例变量,而不需要观察者getter等

您应该将Node类声明为私有静态,因为它不需要访问外部类的成员。如果不这样做,每个实例都将携带对实例化实例的引用。您需要为它提供一个参数来执行此操作。

如果您使用E作为参数名,它将遮蔽外部类中的E,因此为了清晰起见,请考虑给它一个不同的名称。您的外部类将拥有对Node成员的完全访问权限,如果Node是私有的,则没有其他类具有访问权限,因此您无需担心成员的访问级别—只需省略它们即可。

最新更新