gpt4 book ai didi

java - 跟踪父类(super class)中子类的所有实例

转载 作者:行者123 更新时间:2023-11-29 05:31:08 24 4
gpt4 key购买 nike

我有以下精简的 Java 代码:

// Class, in it's own file

import java.util.*;

public class Superclass {
protected List<Subclass> instances = new ArrayList<>();

public class Subclass extends Superclass {
private int someField;

public Subclass(int someValue) {
this.someField = someValue;
updateSuperclass();
}

private void updateSuperclass() {
super.instances.add(this);
}
}
}

// Implementation, somewhere else, everything has been imported properly

Superclass big = new Superclass();
Subclass little1 = big.new Subclass(1);
Subclass little2 = big.new Subclass(2);
Subclass little3 = big.new Subclass(3);

我想在 Superclass 中实现一个方法来对所有 Subclass 执行某些操作。创建 Subclass 时,它应该将自己添加到 Superclass 中的列表中,但每当我尝试在 中遍历该列表时父类(super class),它表示大小为 1。列表中的第一个元素 (instances.get(0)) 只是吐出一个包含所有正确信息的字符串,但不是对象形式,而不是分开。就像每次我去 add 到列表时,它都会以 String 形式附加到第一个(或 zeroeth)元素。

我怎样才能解决这个问题,以便我可以维护 SubclassArrayList 以便稍后循环并运行方法?我绝对是 Java 的初学者,这对我的情况没有帮助。

最佳答案

如果您只需要一个计数,那么我建议使用一个在父类的构造函数中更新的静态值。

private static int instanceCount = 0;
public Constructor() {
instanceCount++;
}

如果您绝对需要列表中的每个实例以便对它们进行操作,那么我强烈建议您重新考虑您的设计。

您始终可以创建一个实用程序类,让您维护要在其上运行进程的对象列表。这样更“面向对象”。您还可以创建一个包含所有操作的类,然后创建一个仅包含数据值的更简单的 bean 类。

但是,如果您坚持,您仍然可以使用相同的技术。

private static List<SuperClass> list = new LinkedList<SuperClass>;
public Constructor() {
list.add(this)
}

关于java - 跟踪父类(super class)中子类的所有实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21054684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com