是否可以使用类名创建"List<SomeClass> obj" "SomeClass"


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的引用在构造函数完成之前转义对象。

  1. 编译器可以按照自己的意愿重新排序构造函数中的语句,因为它们都是独立的。
  2. 在调用构造函数之前,有人可能已经获取了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代替列表。

相关内容

最新更新