是否可以在类名“SomeClass”中创建“List <someclass> obj”</someclass>

时间:2013-05-27 05:24:49

标签: java performance

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

在上面的类中,我创建了相同类对象的List对象。我想知道上面代码的影响,如果可以,我对它的递归影响有疑问吗?

5 个答案:

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

  1. 允许编译器按照自己的意愿对构造函数中的语句重新排序,因为它们都是独立的。
  2. 在调用构造函数之前,有人可能已经抓取了LIBRARY的副本,并且在Book对象完全可用之前,getLibrary调用可以访问LIBRARY。任何事情都可能发生。
  3. 此外,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而不是列表来提高内存效率。