迭代继承的类对象的List

时间:2015-03-08 20:21:20

标签: java loops inheritance

我有一个List<Task> tasksToDo,它拥有许多不同的对象。其中一些不是Task个对象,而是TimingTask个对象,它们是从Task类继承的类。我的问题是,当我尝试使用以下内容迭代此列表时:

for(Task theTask: tasksToDo)
{

}

如果对象属于该类型,我如何使用TimingTask对象内部的方法? TimingTask对象类型有一个名为getAdd的方法,该方法仅存在于该类型中。因此,当我尝试使用theTask.getAdd时,由于getAdd类类型中不存在Task方法,因此出现错误。

4 个答案:

答案 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
       }
    }