如何通过 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++;
}
//...
}
我有一个问题: 有 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++;
}
//...
}