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 メソッドを package-private に変更できますか?
編集:
これが Student クラスです。この質問では、Student を不変にするために必要な変更について説明するよう求められました。変数を final にできるように、両方のセッター メソッドをコメントアウトしました。これが真に不変にする唯一の方法ですか?
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; }
}