我正在努力理解为什么这是可能的。我是一个java新手,并且不了解你如何拥有类型为Example的任何类型(列表或集合)的集合。我正在努力了解这个的递归性质以及使用它的原因。
class Example {
private Set<Example> setExample;
//....
}
答案 0 :(得分:9)
对象可以包含对同一类的其他对象的引用。它甚至可以包含对自身的引用(尽管在某些情况下可能会导致问题)。
至于为何使用它 - 现实生活中的物体可以(通常是)与同类型的其他物体相关。一个人与其他人(他们的家庭成员)有关,一个网页可以参考与其相关的其他网页等...
数据结构中此类引用的常见用法是节点/链接,用于实现链接列表和树。除了对与当前节点/链路相关的一个或多个其他节点/链路的引用之外,每个节点/链路还保存一些数据。
class TreeNode<T> {
T data;
private List<TreeNode<T>> children;
}
答案 1 :(得分:3)
这是可能的,因为Example
类型的变量只是对此类型对象的引用。 Java试图隐藏其他语言所谓的指针。
答案 2 :(得分:3)
这个问题是否可能取决于你的其余代码。例如
class Example {
private Set<Example> setExample;
public Example() {
setExample = new HashSet<Example>();
}
将创建可容纳Example
个对象的新空容器。它没有任何问题。然而
class Example {
private Set<Example> setExample;
public Example() {
setExample = new HashSet<Example>();
setExample.add(new Example());
}
将创建一些无限循环,您将得到OutOfMemoryError
,因为Example
的每次创建都会创建另一个Example
实例,依此类推。但是,这不是递归。