Посоветуйте, пожалуйста, как правильно организовать проверку на уникальность объекта перед его созданием.
public class User {
private String name;
private static Set<String> onlineUsers = new HashSet<>();
public User(String name) { this.name = name; onlineUsers.add(name); }
public void logoutUser() { onlineUsers.remove(this.name); }
public String getName() { return name; }
}
У меня есть класс User, я хочу исключить создание пользователей с одинаковым именем, для этого я хочу записать все имена в HashSet и перед созданием нового объекта User я буду проверять существует ли такое имя. Как правильно организовать логику проверки (правильно ли включать её в данный класс):
1. в конструкторе перед созданием нового объекта User? Нормально ли конструктору выбросить Exception?
2. в том месте кода, где я вызываю конструктор нового объекта User, но в таком случае остается возможность создания двух одинаковых объектов (в другом месте кода, где не будет реализована аналогичная проверка).
3. сделать конструктор private и добавить public static метод addNewUser, который будет проверять есть ли пользователь с таким именем, вызывать конструктор и возвращать ссылку на новый объект? Что должен вернуть данный метод, если указанный объект уже существует и следует ли ему выбросить Exception?