package main;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public final class Tutor {
private final String name;
private final Set<Student> tutees;
public Tutor(String name, Student[] students) {
this.name = name;
this.tutees = new HashSet<Student>();
for (int i = 0; i < students.length; i++) {
tutees.add(students[i]);
}
}
public Set<Student> getTutees() { return Collections.unmodifiableSet(tutees); }
public String getName() { return name; }
}
Есть ли еще что можно сделать, чтобы сделать этот класс неизменным? Строка уже неизменна, набор возвращается немодифицируемым. Переменные tutees и name являются частными и окончательными. Что еще можно сделать? Если только классы, использующие класс Tutor, были в пакете, я могу изменить конструктор, метод getTutees и метод getName для private-private?Можно ли сделать этот класс более неизменным?
Edit:
Вот класс Student, вопрос попросил меня описать необходимые изменения и сделать Student неизменны. Я прокомментировал оба метода setter, чтобы я мог сделать переменные окончательными. Это единственный способ сделать его по-настоящему неизменным?
public final class Student {
private final String name;
private final String course;
public Student(String name, String course) {
this.name = name;
this.course = course;
}
public String getName() { return name; }
public String getCourse() { return course; }
//public void setName(String name) { this.name = name; }
//public void setCourse(String course) { this.course = course; }
}
Я думаю, вы можете захотеть этого при просмотре кода ... – Zizouz212
Если 'Student' не изменен, вызывающий код может изменить его позже. Глубоко скопируйте массив. – fukanchik
Модификации строк могут вызвать создание новых строк, вы можете использовать окончательный StringBuffer. – Ashutosh