我有两个不可变类:User 和 Department,它们使用双向关联连接 - User 引用了 Department 和 Department 有一个 User 列表。如何使用提供的用户创建一个新的部门实例?
代码:
class User {
private final Department department;
private final String name;
public User(Department department, String name) {
this.department = department;
this.name = name;
}
}
class Department {
private final List<User> users;
private final String name;
public Department(List<User> users, String name) {
this.users = new ArrayList<>(users);
this.name = name;
}
}
最佳答案
我觉得在你的情况下你可以稍微修改你的设计并使用特殊的UsersBuilder
,即
class Department {
final List<User> users;
final String name;
public Department(String name) {
this.users = UsersBuilder.buildUsers(this);
this.name = name;
}
}
class UsersBuilder {
public static List<User> buildUsers(Department department) {
List<User> usersList = new ArrayList<>();
// add users to the list via department reference
return Collections.unmodifiableList(usersList);
}
}
一般来说,在对象的构造函数完成之前使用对象的引用并不是一个好主意;但在这种特殊情况下,它看起来很安全。
在这种情况下这些对象真的是不可变的。
关于java - 如何在双向关联中实例化不可变类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29512910/