如何在 MyClass 的构造函数内将 MyClass 类型的实例添加到 MyClass 中声明的 MyClass 数组?

How do I add an instance of type MyClass to an array of MyClass, declared in MyClass, inside the constructor of MyClass?

为了跟踪实例,我们有一个数组 MyClass[] mc = new MyClass[5];

我想在构造函数调用期间保存在此数组中创建的 MyClass 实例。

像这样:

public class MyClass{
  private static final int MAX_SIZE = 64;
  private static int number = 0;
  private static MyClass[] classList= new MyClass[MAX_SIZE];


  public MyClass(MyClass mc) { 
    classList[number++] = mc;
  }

  public static void main(String[] args) {
  MyClass mc1 = new MyClass(mc1);
}

但这不起作用,因为我收到 "mc1 might not be initialized" 错误,这是预期的,tbh。

现在,我知道我们可以创建另一种方法来将创建的 class 的实例保存在数组中,但是这个 'saving instances of class' 符合 class 的自身利益,而不是想要强制 class 的用户调用此方法。因此找到一种方法在 const 本身中完成它。

我该怎么做?非常感谢您! :)

求朋友。

您可以在构造函数中执行此操作:

classList[number++]  = this;

而且根本没有那个 mc 参数。

当然,整个想法都是不好的做法。 class 有明确的责任。您正在承担另一项责任(计算/列出实例)。所以你的代码除了容易造成内存泄露外,还违反了单一职责原则。

如果你想跟踪某些对象,那么有一个 another class 来保存这样的列表并在那里明确注册新创建的对象。

使用列表(例如 ArrayList)可以做得更好。 ArrayList的性能并不比数组差多少

public class ArrayTest { 私有静态列表 classList = new ArrayList<>();

public ArrayTest() {
    classList.add(this);
}

public static void main(final String[] args) {
    final ArrayTest mc1 = new ArrayTest();
}

}

在构造函数中使用 MyClass mc 作为参数是错误的。该 MyClass 实例无法初始化,因为它一直需要另一个先前已初始化的实例。正如我之前有人指出的那样,您可以使用 ... = this 并解决它,但不建议这样做。只需编写额外的方法。