Java 为什么我的返回值不能正确识别?

Java 为什么我的返回值不能正确识别?,java,Java,MyClass.java protected LinkedBlockingDeque<JobSet> currentWork = new LinkedBlockingDeque<JobSet>(); public LinkedBlockingDeque<JobSet> getCurrentWork() { return currentWork; } 它需要一个作业集,但得到一个对象。我似乎很清楚,它返回了正确的对象,那么我错过了什么 Error:

MyClass.java

protected LinkedBlockingDeque<JobSet> currentWork = new LinkedBlockingDeque<JobSet>();

public LinkedBlockingDeque<JobSet> getCurrentWork() {
    return currentWork;
}
它需要一个
作业集
,但得到一个
对象
。我似乎很清楚,它返回了正确的对象,那么我错过了什么

Error: java: incompatible types
  required: com.production.model.JobSet
  found:    java.lang.Object

可能是您的一个方法被声明为返回
LinkedBlockingDeque
,而不是
LinkedBlockingDeque

  • 检查
    getApprovedJobSets()
    的声明返回类型
  • 查看方法
    getWorkFromQueue()
    中的代码,可能是抛出了错误
此外,编译器是否给出任何“未检查类型”或“原始类型”警告?

事实上,如果我理解正确,您的错误不是来自return语句,而是来自else语句中的两行。
我认为您应该查看这些方法返回的内容,并尝试修改它们

您无法从您发布的代码中获得您提到的错误。编译时不会出现错误:

import java.util.concurrent.LinkedBlockingDeque;
import java.util.Collection;

class dummy {
    static class JobSet {public Object getUuid() {return null;}}
    static class CompleteWorkRequest {public Collection getApprovedJobSets() {return null;}};
    void getWorkFromQueue() {}
    void sendToNextWorkflowProcess(JobSet js) {}


    protected LinkedBlockingDeque<JobSet> currentWork = new LinkedBlockingDeque<JobSet>();

    public LinkedBlockingDeque<JobSet> getCurrentWork() {
        return currentWork;
    }

    public boolean completeAllWork(CompleteWorkRequest request) {
        for (JobSet jobSet : getCurrentWork()) {
            //if it's approved, find the workflow process it needs to go to next and put it there
            if (request.getApprovedJobSets().contains(jobSet.getUuid().toString())) {
                sendToNextWorkflowProcess(jobSet);
            } else {
                getCurrentWork().remove(jobSet);
                //logger.info("Rejected JobSet: " + jobSet.getUuid());
            }
        }

        getWorkFromQueue();

        return true;
    }
}
import java.util.concurrent.LinkedBlockingDeque;
导入java.util.Collection;
类虚拟{
静态类作业集{public Object getUuid(){return null;}}
静态类CompleteWorkRequest{public Collection getApprovedJobSets(){return null;}};
void getWorkFromQueue(){}
void sendToNextWorkflowProcess(作业集js){}
受保护的LinkedBlockingDeque currentWork=新LinkedBlockingDeque();
public LinkedBlockingDeque getCurrentWork(){
回流功;
}
公共布尔值completeAllWork(CompleteWorkRequest请求){
对于(作业集作业集:getCurrentWork()){
//如果已批准,请找到需要转到下一步的工作流流程并将其放在那里
if(request.getApprovedJobSets()包含(jobSet.getUuid().toString()){
sendToNextWorkflowProcess(作业集);
}否则{
getCurrentWork().remove(作业集);
//info(“拒绝的作业集:+JobSet.getUuid());
}
}
getWorkFromQueue();
返回true;
}
}

根据注释:使用
迭代器应该可以解决问题。我猜在迭代列表并同时删除一个项目时会有干扰,导致循环读取已删除的值。

您可以共享for循环的部分正文吗?您所显示的代码无法获得您提到的错误您可能希望避免在迭代时从列表中删除
作业集。
。您应该使用迭代器从正在迭代的列表中删除对象。当您试图读取刚删除的值时,如果它会造成一些干扰,我也不会感到惊讶。@VinitPrajapati否,空列表不会进入
for
循环。不使用迭代器最多会导致运行时错误。最初的编译时错误一定是由其他原因引起的。我被告知把它作为一个答案,因为它似乎解决了这个问题。然而正如@Joni所指出的:这不可能是原因。看到当前代码会很好,这样我们就可以确定是什么导致了它。
import java.util.concurrent.LinkedBlockingDeque;
import java.util.Collection;

class dummy {
    static class JobSet {public Object getUuid() {return null;}}
    static class CompleteWorkRequest {public Collection getApprovedJobSets() {return null;}};
    void getWorkFromQueue() {}
    void sendToNextWorkflowProcess(JobSet js) {}


    protected LinkedBlockingDeque<JobSet> currentWork = new LinkedBlockingDeque<JobSet>();

    public LinkedBlockingDeque<JobSet> getCurrentWork() {
        return currentWork;
    }

    public boolean completeAllWork(CompleteWorkRequest request) {
        for (JobSet jobSet : getCurrentWork()) {
            //if it's approved, find the workflow process it needs to go to next and put it there
            if (request.getApprovedJobSets().contains(jobSet.getUuid().toString())) {
                sendToNextWorkflowProcess(jobSet);
            } else {
                getCurrentWork().remove(jobSet);
                //logger.info("Rejected JobSet: " + jobSet.getUuid());
            }
        }

        getWorkFromQueue();

        return true;
    }
}