如何在不使用instanceOf或getClass()的情况下知道类类型?

时间:2015-05-30 09:48:35

标签: java inheritance reflection

我有一个由Student和Employee继承的Person类。 我有另一个类PersonList,它有一个类型Person列表的列表(元素可以是Student和Employee类型)

有第三方API有两个重载方法,即

void display(Employee emp)void display (Student student)

当我遍历Person列表时,我需要知道对象类型,以便我可以调用相应的display()方法。

我不想使用instanceOf或getClass()。

1 个答案:

答案 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();
    }