首页 > 解决方案 > 如何在 MyClass 的构造函数中将 MyClass 类型的实例添加到在 MyClass 中声明的 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 可能未初始化”错误,tbh。

现在,我知道我们可以创建另一个方法来将创建的类的实例保存在数组中,但是这种“保存类的实例”符合类的自身利益,并且不想强迫类的用户调用此方法。因此找到一种方法来在 const 本身中完成它。

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

求朋友。

标签: javaarraysclassobjectinstance

解决方案


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

classList[number++]  = this;

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

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

如果你想跟踪某些对象,那么有另一个类来保存这些列表并在那里显式地注册新创建的对象。


推荐阅读