如何在 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
并解决它,但不建议这样做。只需编写额外的方法。
为了跟踪实例,我们有一个数组 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
并解决它,但不建议这样做。只需编写额外的方法。