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

时间:2016-11-17 20:31:13

标签: java visibility inner-classes

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

让我们说MyGraph<E extends Comparable<E>>是我写的用来实现图形的课程。

我想创建一个内部类Node,以便&#34;封装&#34;类型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,如果它的实例变量应该是声明为publicprivate。对于我将在Node中插入的一些最终方法也是如此。

基本上,类Node应该像C中的记录类型(带typedef),外层应该能够访问节点的所有实例变量而没有观察者吸气等等

1 个答案:

答案 0 :(得分:1)

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

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