我有一个程序,其中有四个类Programmer的对象,以及一些都继承了我的父类Employee的其他类。

因此,在我的主要方法中,我将这些Employee对象存储在ArrayList中。 Programmer类的主要实例数据是'technologies',它保存着他们所知道的各种技术的字符串。例如“ SQL”,“ Java”,“ Python” ...等。

好吧,我被困住了,因为我需要确定我的程序员中有多少人了解Java并累加他们的个人收入等。但是,当然,当我遍历Employee ArrayList时...

            for (Employee e : staff)
    {
        System.out.println(e.toString());
        salaryTotal += e.getSalary();
        if (e instanceof Programmer){
            programmerStaff++;
            if (e.technologies.contains("Java")){
            }
        }
    }


它在我的Employee类中查找实例数据“技术”,在确定了instanceof Programmer之后如何获取它来查看对象的实例化类?

我也尝试过使用访问方法,但它只会在Employee中查找所述方法

最佳答案

您必须将其强制转换为Programmer

if (((Programmer) e).technologies.contains("Java"))


我们在括号中添加了(Programmer) e,因为如果没有,它将尝试将contains方法返回的内容(在这种情况下为布尔值)转换为Programmer

您也可以这样做:

Programmer programmer = (Programmer) e;


并非所有类型都可以转换为另一种特定类型,因此使用instanceof进行检查是避免使用ClassCastException的一种好习惯。

10-05 18:04