Передача неопределенного количества полей в конструктор(динамический конструктор)

Я пишу программу, которая в консоли принимает данные о студенте. Эти данные далее записываются в конструктор класса 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, пришлось бы писать еще больше такого же кода. Подскажите, можно ли это реализовать через какой-нибудь цикл, чтобы не писать море перегруженных конструкторов?


Ответы (0 шт):