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

时间:2018-09-26 04:23:48

标签: java arrays class object instance

为了跟踪实例,我们有一个数组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本身中完成此操作的方法。

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

寻求朋友。

3 个答案:

答案 0 :(得分:1)

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

classList[number++]  = this;

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

但是,当然,整个想法都是不好的做法。班级有明确的责任。您要承担另一个责任(计数/列出实例)。因此,除了代码很容易造成内存泄漏这一事实之外,它还违反了单一责任原则。

如果要跟踪某些对象,则可以使用另一个类来保存此类列表,并在其中明确注册新创建的对象。

答案 1 :(得分:0)

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

公共类ArrayTest {     私有静态列表classList = new ArrayList <>();

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

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

}

答案 2 :(得分:0)

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