为了跟踪实例,我们有一个数组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本身中完成此操作的方法。
我该怎么做?非常感谢您!! :)
寻求朋友。
答案 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
来解决它,但是不建议这样做。只需编写额外的方法。