1
class SomeClass{
 List<Someclass> list=new ArrayList<SomeClass>();//getter and setters
}

In above class, i have created the List object of same class objects. I want to know the impact of above code and if it is ok to have, I have doubt about its recursion impact ?

4

5 回答 5

4

的定义List<T>不依赖于 T 的结构。编译器使用该信息仅允许添加 T 类型的对象,并且当您检索它时会自动将返回值转换为适当的类型。因此,将 List 定义放在同一个类中是可以的。

该列表仅包含对 T 类型对象的引用。如果要分配完整的对象并将其存储为列表的一部分,则会导致问题。

于 2013-05-27T05:29:38.817 回答
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在构造函数完成之前对对象进行转义。

  1. 编译器可以按照自己的意愿重新排序构造函数中的语句,因为它们都是独立的。
  2. 在您调用构造函数之前,有人可能已经获取了 LIBRARY 的副本,并且 getLibrary 调用可能会在Book对象完全可用之前访问 LIBRARY。那时任何事情都有可能发生。

此外,复合模式与您的想法相似。

于 2013-05-27T05:44:13.060 回答
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);

}

}

于 2013-05-27T05:39:22.093 回答
0

是的,你可以做到没有问题。

没有递归问题,因为在创建列表时没有创建任何类实例 - 使用您的类名只是列表的类型

于 2013-05-27T05:34:03.323 回答
0

这将创建 SomeClass 对象的树。只要您可以接受带有空列表的叶子,就没有问题。您可能希望考虑使用 null 而不是 list 以获得更好的内存效率。

于 2013-05-27T19:27:21.017 回答