2013-10-18 46 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

你可以顯示「任務」類的完整代碼嗎? –

相關問題