我有一个程序,其中有四个类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
的一种好习惯。