Передача неопределенного количества полей в конструктор(динамический конструктор)
Я пишу программу, которая в консоли принимает данные о студенте. Эти данные далее записываются в конструктор класса Student.
public class Student {
private String name;
private String group;
private String studentID;
private int age;
private String sex;
private String faculty;
}
public Student(String name, String group, String studentID) {
this.name = name;
this.group = group;
this.studentID = studentID;
}
public Student(String name, String group, String studentID, int age, String sex, String faculty) {
this.name = name;
this.group = group;
this.studentID = studentID;
this.age = age;
this.sex = sex;
this.faculty = faculty;
}
// Getters and setters, toString()
Есть класс StudentList. В нем хранится множество studentIds и список студентов. При создания нового объекта Student проверяется существует ли уже студент с таким же studentID.
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public class StudentsList {
HashSet<String> studentsIds = new HashSet<>();
List<Student> studentsList = new ArrayList<>();
public void addStudent(Student student) {
if (!studentsIds.contains(student.getStudentId())) {
studentsList.add(student);
}
studentsIds.add(student.getStudentId());
}
public void printList() {
for (Student student : studentsList) {
System.out.println(student.toString());
}
}
}
Метод main() запрашивает у пользователя вести данные о студенте через запятую. Дальше записывает эти данные в конструктор. Я хочу реализовать программу таким образом, чтобы пользователь мог ввести любое количество данных в диапазоне от 3 до 6 полей.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
StudentsList studentsList = new StudentsList();
Scanner scanner = new Scanner(System.in);
System.out.println("Введите информацию о студенте: "ФИО, номер группы, номер студенческого билета" или другую доп.информацию");
while (true) {
String[] segments = scanner.nextLine().split(",");
if (segments[0].equals("end")) {
break;
}
Student student = new Student(segments[0].trim(), segments[1].trim(), segments[2].trim());
studentsList.addStudent(student);
System.out.println("Введите информация о студенте (для завершения работы программы введите "end") или другую доп.информацию");
}
studentsList.printList();
}
}
Я думал о перегрузке конструктора, а также if-условий, которые бы проверяли сколько пользователь ввел полей.
if (segments.length == 3) {
Student student = new Student(segments[0].trim(), segments[1].trim(), segments[2].trim());
} else if...
Но мне показалось, что это выходит не очень гибко, т.к. при добавлении еще большего количества полей в классе Student, пришлось бы писать еще больше такого же кода. Подскажите, можно ли это реализовать через какой-нибудь цикл, чтобы не писать море перегруженных конструкторов?