我有一个由Student和Employee继承的Person类。 我有另一个类PersonList,它有一个类型Person列表的列表(元素可以是Student和Employee类型)
有第三方API有两个重载方法,即
void display(Employee emp)
和void display (Student student)
当我遍历Person列表时,我需要知道对象类型,以便我可以调用相应的display()方法。
我不想使用instanceOf或getClass()。
答案 0 :(得分:3)
一般来说,在这种情况下,第三方API的设计很糟糕。特别是如果你被允许改变它所依赖的类......
但是无论如何,如果允许你更改课程,你可以添加displayMe
之类的方法(我假设您的第三方课程被称为PersonPrinter
)。
abstract class Person {
abstract public void displayMe();
}
class Employee extends Person {
public void displayMe() {
PersonPrinter.display(this);
}
}
class Student extends Person {
public void displayMe() {
PersonPrinter.display(this);
}
}
由于每个类都知道它是什么,它会从display
中选择正确的PersonPrinter
版本。
现在你可以像这样编写你的循环:
List<Person> personList = new ArrayList<>();
personList.add(new Employee());
personList.add(new Student());
for ( Person p : personList ) {
p.displayMe();
}