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

Using an inner class to create a private record for the outer class in java / inner methods visibility

我必须在 Java 中实现一个名为 Graph<E> 的接口。

假设 MyGraph<E extends Comparable<E>> 是我写的 class 来实现 Graph。

我想创建一个内部 class Node 以便 "encapsulate" 类型 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;
        }
    }
}

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

基本上class节点应该像C中的记录类型(typedef),外层class应该可以访问节点的所有实例变量没有观察者getter等

您应该将节点 class 声明为私有静态,因为它不需要访问外部 class 的成员。如果您不这样做,每个实例都将携带对实例化实例的引用。你需要给它一个参数来做到这一点。

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