在创建时或创建后将对象添加到列表

时间:2015-01-10 18:03:39

标签: java arraylist

在java中我想创建每个对象,添加到对象样本列表中。 有没有办法在构造函数本身中执行它,如:

public ObjectSample() {
    mObjectSamples.add(this);
}

或者我必须在创建后调用add方法。

5 个答案:

答案 0 :(得分:1)

您无法更改Object类的构造函数。

您可以在其中一个类中使用构造函数将新创建的实例添加到静态Collection中。

public YourClass 
{
    public static List<YourClass> list = new ArrayList<>();
    public YourClass()
    {
        list.add(this);
    }
}

答案 1 :(得分:1)

将您对象的新实例添加到列表中。

public class Foo{

    public static List<Foo> list = new List<Foo>();
    public Foo(){
        //Do whatever
    }

    public stativ void main(String args[]){
        list.add(new Foo());
    }

}

这会将对象作为参数传递给add()方法,从而将对象添加到列表中。

答案 2 :(得分:0)

首先创建对象,然后将此对象添加到List

class MyClass{

    private static List<Object> mObjectSamples = new ArrayList<Object>(); 
    private int a,b;

      MyClass(int a, int b){  // initialize your object using parametrized constructor
       this.a = a;  // suppose you have to initialize you a and b member of class.
       this.b= b;
       mObjectSamples.add(this);
      }
 }

答案 3 :(得分:0)

首先,您无法修改库类的构造函数,尤其不能修改Object的构造函数。但是,我绝对不建议将每个新对象放在列表中,因为有大量的对象你甚至不需要关心,我无法想到任何你希望将所有这些都放在列表中的情况。

如果您想要特定类型的每个对象,例如在您的列表中Element,您可以像这样定义Element类:

public class Element
{
    public Element()
    {
        elements.add(this);
        ...
    }
    ...
}

答案 4 :(得分:0)

考虑一个静态工厂方法,这是 Joshua Block 的Effective Java 推荐的,也在 this Baeldung post 中描述。如果您将构造函数设为私有,则您的类只能由静态工厂方法实例化。将构造函数限制为执行对象的类指定字段的实例化,并让更通用的代码处理类之外的任何内容,这通常是一个好主意。静态工厂方法是放置此类外部实例化的好地方。

对于名义上的 Element 类,它可能如下所示:

public class Element {
    private final List<Element> trackedElements = new ArrayList<>();

    public static Element newTrackedElement(...) {
        var e = new Element(...);
        trackedElements.add(e);
        ...other out-of-class instantiation...
        return e;
    }

    private Element(...) {
        ...in-class instantiation...
    }
    ...
}
    

使用这种方法,集合只包含完全实例化的对象,并且这些对象在工厂方法调用完成时保证在集合中。它比拥有一个完全实现的工厂类更简单,如果在创建新对象时涉及足够的额外工作,这可能会很有用。