这是我的问题。我有一个任务和一个任务列表。
public class Task {
private Tasklist task list;
public void setTasklist(Tasklist tasklist) {
// the code
}
}
public class Tasklist {
private List<Task> tasks;
public void addTask(Task task) {}
public void removeTask(Task task) {}
}
我想要的是:我想在用户更改任务的任务列表变量后更新任务列表
所以如果我执行
Tasklist myTasklist = new Tasklist();
Task myTask = new Task();
myTask.setTasklist(myTasklist);
我想看到这个。
myTasklist.getTasks(); // => [myTask]
反之亦然,如果我将任务添加到我的任务列表中,我希望它自动更新任务任务列表参考
Tasklist myTasklist = new Tasklist();
Task myTask = new Task();
myTasklist.addTask(myTask);
myTask.getTasklist(); // => myTasklist
我试图自己解决这个问题,但我总是陷入堆栈溢出。
答案 0 :(得分:3)
任务属于列表,列表知道其任务。简单的东西 - 只缺少一件事:决定谁在添加什么?
我的意思是,通常你会将任务添加到 TaskList ,那么以相反的方式对它进行建模有什么意义呢?为了简单起见,我敢于删除setTaskList方法。
现在可以清楚地看到,通过调用add()将新任务添加到任务列表中。只有一种方法可以将任务添加到任务列表 - 通过调用add()。将任务添加到任务列表后,此add方法将更新任务的taskList属性。
public class Task {
private TaskList taskList;
}
public class Tasklist {
private List<Task> tasks;
public void addTask(Task task) {
tasks.add(task);
task.taskList=this; // belongs to this list now
}
public void removeTask(Task task) {
tasks.remove(task);
task.taskList=null; // belongs to no tasklist
}
}
答案 1 :(得分:0)
...你最终得到了stackoverflow。
循环依赖很少是一个好主意。问自己的问题是:没有任务列表,任务是否存在?任务列表是否可以在不知道其任务的情况下存在?
最大的问题是你必须处理Tasklist跟踪任务的可能性,该任务被引用到另一个任务列表。
但是,对于这个问题,如果你要对TaskList进行标记的调用会在Task上调用一些将调用TaskList的相同方法的东西,你将获得堆栈溢出。