java - Java 中的双向关系

标签 java oop bidirectional

这是我的问题。我有一个任务和一个任务列表。

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

我试图自己解决这个问题,但总是以堆栈溢出告终。

最佳答案

任务属于列表,列表知道它的任务。简单的事情 - 只缺少一件事:决定谁将什么添加到什么?

我的意思是,通常您将一个任务添加到TaskList中,那么以相反的方式对其进行建模有什么意义呢?为了简单起见,我敢于删除 setTaskList 方法。

现在可以清楚地看到,您通过调用 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
  }
}

关于java - Java 中的双向关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35998709/

相关文章:

mongodb - Mongo 中的双向字典

java - Double Check Lock 在此 java 代码上不起作用?

java - 如何使用 Java Swing 创建图像映射?

Java/Android 绝对最快的方式来定期获取当前秒数 (0-59) 和/或毫秒数 (0-999)

java - 为什么构造函数的名称不能与类名不同,只要它们是唯一的

java - 使用 Mapstruct 映射具有双向关系的对象

java - Hibernate:双向 ManyToOne 映射 - 逆关系不起作用

java - 默认构造函数在此场景中的意义

php - (php) 更好的方式来使用全局变量?或者如何避免它们?

java - java中的 vector 只包含对象?