如何通过 class B 构造函数填充 class A 中的对象列表

How to populate list of object in class A by class B constructor

我有一个问题: 有 2 个 classes 实现了一些接口。在 class A 中,我有一个 class B 的对象列表。

有没有一种方法可以使用 class B 构造函数来填充这些列表,而不是对将要创建的每个对象进行硬编码? 在 class A 中,我有通过给定参数搜索特定 class B 对象的方法,但问题是要弄清楚每次创建新对象时如何 "autopopulate" 此列表。

我试图从 class A 调用方法 addNodeToList(),但是没有这个 class 的实例我不能那样做。

有什么优雅的方法可以自动填充此列表吗?

代码如下:

CLASS一个

public class MyStructure implements IMyStructure {

  private List<INode> nodes;

  public MyStructure() {

  }

  @Override
  public INode findByCode(String code) {
    //impl
  }

  @Override
  public INode findByRenderer(String renderer) {
      //impl
  }

  @Override
  public int count() {{
    //impl  
  }

  public void addNodeToList(INode node){
      nodes.add(node);
  }
}

CLASS B

public class CompositeNode implements ICompositeNode {
private String code;
private String renderer;

MyStructure myStructure;

public static int counter;

public CompositeNode(String code, String renderer){
    this.code= code;
    this.renderer=renderer;
    myStructure.addNodeToList(this);
    counter++;
}

编辑: 我正在考虑在 class B 中创建静态列表,但我认为这不是一个好的做法。 我不知道如何有效地解决这个问题。

已完成: 我在 class A 内部创建了一个方法,如下所示:

public class MyStructure implements IMyStructure {
public void addNodeToList(String code, String renderer) {

        CompositeNode node = new CompositeNode(code, renderer);

        nodes.add(node);
    }

它按照我想要的方式工作——我没有将列表存储在 class B 中,而是它自己填充列表。

在不知道更多上下文和用法的情况下,我会简单地在 class 中添加一个 getter A:

public class MyStructure implements IMyStructure {
    //...
    public List<INode> getNodes() {
        return this.nodes;
    }
   //..
}

然后可以在 class B 中使用它来向 class A 的列表中添加一个元素:

public CompositeNode(String code, String renderer){
    //...
    myStructure.getNodes.add(this);
    //...
}

我认为您不需要 addNodeToList 方法,除非在别处使用。

您可以实例化 INode 对象列表并在 MyStructure 的构造函数中添加第一个节点,这样您就可以创建 CompositeNode,其中 MyStructure 对象填充了 CompositeNode 对象:

我的结构

public class MyStructure implements IMyStructure {
    private List<INode> nodes;

    public MyStructure() {
        super();
    }

    public MyStructure(INode node) {
        nodes = new ArrayList<>();
        nodes.add(node);
    }
    //...
}

复合节点

public class CompositeNode implements ICompositeNode {
    private String code;
    private String renderer;
    private MyStructure myStructure;

    public static int counter;

    public CompositeNode(String code, String renderer){
        this.code= code;
        this.renderer=renderer;
        myStructure = new MyStructure(this);
        counter++;
    }
    //...
}