我有一个List<Task> tasksToDo
,它拥有许多不同的对象。其中一些不是Task
个对象,而是TimingTask
个对象,它们是从Task
类继承的类。我的问题是,当我尝试使用以下内容迭代此列表时:
for(Task theTask: tasksToDo)
{
}
如果对象属于该类型,我如何使用TimingTask
对象内部的方法? TimingTask
对象类型有一个名为getAdd
的方法,该方法仅存在于该类型中。因此,当我尝试使用theTask.getAdd
时,由于getAdd
类类型中不存在Task
方法,因此出现错误。
答案 0 :(得分:2)
它的错误形式是迭代基类对象数组并尝试将它们视为派生类。通常,您希望迭代基类对象,因为您希望将它们视为该对象类型。放入特定于派生类的逻辑会使循环代码更难以维护。
答案 1 :(得分:1)
使用instanceof:
for(Task theTask: tasksToDo) {
if (theTask instanceof TimingTask) { //if theTask is an istance of the class TimingTask
TimingTask theTimingTask = (TimingTask)theTask;
//now you can use theTimingTask.getAdd();
} else {
//theTask is not an instance of the class TimingTask
}
}
答案 2 :(得分:0)
for(Task theTask: tasksToDo)
{
((TimingTask)theTask).getAdd();
}
如果要首先检查theTask是TimingTask的实例,请使用instanceof
:
if(theTask instanceof TimingTask)
((TimingTask)theTask).getAdd();
答案 3 :(得分:-1)
Ther是您解决问题的可能方案
for(Task theTask: tasksToDo){
if (theTask instanceof TimingTask){
TimingTask theTimingTask = (TimingTask)theTask;
//Your treatments for your theTimingTask objects
}else{
//If you need other treatments for only the Task objects and your other different objects
}
}