有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个班级成员,由学生和员工继承。 我有另一个类PersonList,它有一个Person类型的列表,即list(元素可以是Student和Employee类型)

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

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

当我迭代Person list时,我需要知道对象类型,以便调用适当的display()方法

我不想使用instanceOf或getClass()


共 (1) 个答案

  1. # 1 楼答案

    一般来说,这种情况下的第三方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);
        }
    }
    

    因为每个类都知道它是什么,所以它将从PersonPrinter中选择display的正确版本

    现在您可以这样编写循环:

        List<Person> personList = new ArrayList<>();
        personList.add(new Employee());
        personList.add(new Student());
        for ( Person p : personList ) {
            p.displayMe();
        }