0

Javac 对我说:

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

但在我的任务中,参数是日期,而不是整数:

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

这是一个代码调用者:

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 没有显示任何错误,但编译器发誓(

4

2 回答 2

1

从你到现在为止添加和说的内容来看,我将继续我以前的预感:在编译项目时(你只是在做“javac”还是其他什么?)你没有重新编译 Task 类,编译器正在使用一些旧版本该方法接受 int 而不是 Date (正如我所问:你有这样的版本吗?)。

类路径和编译选项必须在 Eclipse 中正确设置,因此它不会抱怨。

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

于 2013-10-18T18:12:55.153 回答
0

错误消息实际上是说nextTimeAfter需要一个int

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

你通过了一个date. 你应该通过一个int.

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

于 2013-10-18T17:56:32.480 回答