class SomeClass{
List<Someclass> list=new ArrayList<SomeClass>();//getter and setters
}
在上面的类中,我创建了相同类对象的List对象。我想知道上面代码的影响,如果可以,我对它的递归影响有疑问吗?
答案 0 :(得分:4)
List<T>
的定义不依赖于T的结构。编译器使用的信息只允许添加类型为T的对象,当您检索它时,会自动将返回值转换为适当的类型。因此,将List定义放在同一个类中是很好的。
该列表仅包含对类型为T的对象的引用。如果要将完整对象分配并存储为列表的一部分,则会导致问题。
答案 1 :(得分:1)
然而,如果你做错了事,有一个微妙的问题会导致令人困惑的错误。假设您尝试设计一个类,以便跟踪该类中的所有对象:
public class Book {
private static final List<Book> LIBRARY = new ArrayList<>();
private String dewey;
private String isbn;
private String author;
private String title;
public Book(String dewey, String isbn, String author, String title) {
this.dewey = dewey;
this.isbn = isbn;
this.author = author;
this.title = title;
LIBRARY.add(this);
}
public static final List<Book> getLibrary() {
return LIBRARY;
}
}
这个类很危险,因为它允许引用this
在构造函数完成之前转义对象。
Book
对象完全可用之前,getLibrary调用可以访问LIBRARY。任何事情都可能发生。此外,Composite模式与您的想法类似。
答案 2 :(得分:0)
是的,你可以做到没问题。
没有递归问题,因为在创建List时没有创建任何类实例 - 使用类名只是List的 type 。
答案 3 :(得分:0)
只需使用....
class SimpleClass
{
String var1;
int var2;
double var3;
}
为这些变量实现所有getter和setter,这样它就会成为列表对象的数据类型。
现在用于存储此类的对象使用SimpleClassMgr
class SimpleClassMgr
{
//this is your list where you will store object
List<Someclass> list=new ArrayList<SomeClass>();
为add()。delete(),update(),get()创建方法以插入和更改记录 例如
public void add()
{
list.add(simpleclassobject);
}
}
答案 4 :(得分:0)
这将创建SomeClass对象的树。只要您对带有空列表的叶子没问题就没问题了。您可能希望考虑使用null而不是列表来提高内存效率。