我有一个通用Person
类和两种类型的人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
在我自己的代码中的任何时间点调用?