私は一般的なクラスと、クラスを拡張するPerson
2 種類の人々Student
を持っています。また、そのセッションに参加する学生のリストと教師のリストを保存する教育セッションもあります。Teacher
Person
class Person {}
class Student extends Person {}
class Teacher extends Person {}
class Session {
List<Student> students = new ArrayList();
List<Teacher> teachers = new ArrayList();
// add a person to the teaching session.
// They should be placed into the appropriate lists
public void enroll(Person p)
{
if (p instanceof Student)
students.add((Student) p)
else if (p instanceof Teacher)
teachers.add((Teacher) p)
}
}
アイデアは、他のコードに人々のリストがあり、必要に応じてリストを繰り返して適切なセッションに登録するというものです。ただし、enroll
メソッドは現在、オブジェクトのタイプを明示的にチェックしています。これは、私にとって望ましくなく、悪い設計のように思えます。
enroll
メソッドのオーバーロードを使用して、このようなメソッドを作成しようとしましたが、これははるかにきれいに見えます
public void enroll(Student p)
{
students.add(p)
}
public void enroll(Teacher p)
{
teachers.add(p)
}
しかし、オブジェクトのリストを反復処理するコードはPerson
、現在の人物が学生インスタンスか教師インスタンスかを判断し、enroll
メソッドに渡す前に適切に型キャストする必要があるようです。
instanceof
自分のコードでいつでも呼び出す必要がないように、これを設計する方法はありますか?