class SomeClass{
List<Someclass> list=new ArrayList<SomeClass>();//getter and setters
}
在上面的类中,我创建了相同类对象的List对象。我想知道上面代码的影响,如果可以的话,我对它的递归影响有疑问?
List<T>
的定义不依赖于T的结构,编译器使用该信息只允许添加类型为T的对象,并且在检索它时自动将返回值转换为适当的类型。因此,在同一个类中使用List定义是可以的。
列表只包含对t类型对象的引用。如果将整个对象作为列表的一部分分配和存储,则会引起问题。
但是,如果您做了错误的事情,有一个微妙的问题可能会导致令人困惑的错误。假设您尝试设计一个类,以便它跟踪该类中的所有对象:
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
的引用在构造函数完成之前转义对象。
- 编译器可以按照自己的意愿重新排序构造函数中的语句,因为它们都是独立的。
- 在调用构造函数之前,有人可能已经获取了LIBRARY的副本,并且在
Book
对象完全可用之前,getLibrary调用可能会访问LIBRARY。任何事情都有可能发生。
复合模式也与您的想法相似。
可以,没问题。
没有递归问题,因为在创建List时没有创建任何类实例-使用类名只是List的类型。
直接使用....
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);
}
}
这将创建一个SomeClass对象树。只要你能接受带有空列表的叶子就没有问题。为了提高内存效率,您可能需要考虑使用null代替列表。