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

Add objects to list on or after creation

在 java 中,我希望创建每个对象,并将其添加到对象样本列表中。 有没有办法在构造函数本身中做到这一点,例如:

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

还是创建后必须调用add方法

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

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

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

先创建您的对象,然后将此对象添加到 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);
      }
 }

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

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() 方法来将对象添加到列表中。

首先,您不能修改库 class 的构造函数,尤其是 Object 的构造函数。但是,无论如何,我绝对不建议将 every new Object 放入列表中,因为有大量您甚至不需要关心的对象,而且我无法想象在任何情况下,您都希望将它们全部放入列表中。

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

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

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

对于概念元素 class,它可能如下所示:

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...
    }
    ...
}
    

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