2013-10-18 43 views
0

javac的为int对我说:实际参数日期无法转换通过方法调用转换

error: method nextTimeAfter in class Task cannot be applied to given types; 
if (processed.nextTimeAfter(start) != null 
^ 
required: int 
found: Date 
reason: actual argument Date cannot be converted to int by method invocation conversion 

,但在我的任务,理由是日期,不是int:

public Date nextTimeAfter(Date current) { 
    // may return null or DATE 
} 

下面是一个代码-caller:

public static Iterable<Task> incoming(Iterable<Task> tasks, Date start, 
      Date end) { 
     if (start.before(end)) 
      return tasks; 
     LinkedList<Task> result = new LinkedList<Task>(); 
     for (Task processed : tasks) { 
      if (processed.nextTimeAfter(start) != null 
        && processed.nextTimeAfter(start).before(end)) { 
       result.add(processed); 
      } 
     } 
     return result; 
    } 

,此外,任务类

public class Task { 
    private Date time; 
    private Date startTime; 
    private Date repeatInterval; 
    private Date endTime; 

    //...getters-setters 

    public Date nextTimeAfter(Date current) { 
     if (current == null) 
       throw new IllegalArgumentException("Argument <current> is NULL"); 
     if (!isActive() || (!isRepeated() && current.after(getTime()))) 
      return null; 
     Date result = getStartTime(); 
     while (result.after(current)) { 
      Date temp = (Date) result.clone(); 
      temp.setTime(temp.getTime() + getRepeatInterval().getTime()); 
      if (temp.after(getEndTime())) 
       return null; 
      result.setTime(result.getTime() + getRepeatInterval().getTime()); 
     } 
     return result; 
    } 
} 

这很奇怪,它为什么如此工作。 Eclipse不显示任何错误,但编译发誓(

+0

什么是“处理”? –

+0

processed是迭代器当前项的foreach的本地值; – ovnia

+2

向我们展示'Task'类的代码。您发布的'nextTimeAfter'方法似乎与抛出的异常不匹配 – SudoRahul

回答

1

根据你添加的内容判断,直到现在我会和我以前的预感一起:在编译项目时(你是简单地做“javac”还是其他的东西?)你不重新编译任务类,编译器使用一些旧的版本中该方法接受一个int而不是一个Date(正如我问:你有这样一个版本?)。

classpath和编译选项必须在Eclipse中正确设置,因此它不会投诉。

要解决它,请确保在编译其他代码之前重新编译Task类。

0

错误消息实际上是说,nextTimeAfter期望一个int

required: int <-- what java expected 
found: Date <-- what you did 

你通过了date你应该传递一个int

你可以调用类似start.getTime()/1000并转换为int

+0

OP在问题中发布了他希望将Date作为参数的问题,并且他的方法签名将Date作为一个参数。因此他很困惑为什么编译器需要一个int。 –

+0

是的,我理解错误,但它为什么期望int,而nextTimeAfter的原型是Date nextTimeAfter(Date current)? – ovnia

+0

你可以显示“任务”类的完整代码吗? –

相关问题