使用内部 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 应该是 Node
或 Node<E>
、public
还是 private
以及实例是否它的变量应该声明为 public
或 private
。对于我将要插入 Node
的一些最终方法也是如此。
基本上class节点应该像C中的记录类型(typedef
),外层class应该可以访问节点的所有实例变量没有观察者、getter等
您应该将节点 class 声明为私有静态,因为它不需要访问外部 class 的成员。如果您不这样做,每个实例都将携带对实例化实例的引用。你需要给它一个参数来做到这一点。
如果您使用 E 作为参数名称,它会遮蔽外部 class 中的 E,因此为了清楚起见,请考虑为其指定一个不同的名称。您的外部 class 将拥有对 Node 成员的完全访问权限,如果 Node 是私有的,则其他 class 将无法访问,因此您无需担心成员的访问级别——只需忽略它们。
我必须在 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 应该是 Node
或 Node<E>
、public
还是 private
以及实例是否它的变量应该声明为 public
或 private
。对于我将要插入 Node
的一些最终方法也是如此。
基本上class节点应该像C中的记录类型(typedef
),外层class应该可以访问节点的所有实例变量没有观察者、getter等
您应该将节点 class 声明为私有静态,因为它不需要访问外部 class 的成员。如果您不这样做,每个实例都将携带对实例化实例的引用。你需要给它一个参数来做到这一点。
如果您使用 E 作为参数名称,它会遮蔽外部 class 中的 E,因此为了清楚起见,请考虑为其指定一个不同的名称。您的外部 class 将拥有对 Node 成员的完全访问权限,如果 Node 是私有的,则其他 class 将无法访问,因此您无需担心成员的访问级别——只需忽略它们。