我有以下计时器代码,并且基于run方法的执行(无论是否成功),我想返回一个布尔值。

但是我收到错误消息:
封闭范围中定义的连接的局部变量必须是final或有效的final。

我如何解决这个问题以完成我想要的?
这是代码:

    private boolean getSwitchesOnRc(NamedPipeClient pipe, DV_RC_EntryPoint rc_EntryPoint, int allowedAttempts, int counter){
    final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

    boolean connected = false;
    ScheduledFuture<?> countdown = scheduler.schedule(new Runnable() {
        @Override
        public void run() {
            connected = attemptRetrievalOfSwitches(pipe, rc_EntryPoint, allowedAttempts, counter);
        }}, 1, TimeUnit.MINUTES);


    return connected;
}

最佳答案

您需要安排一个Callable而不是Runnable来做到这一点。

这将满足您的要求:

ScheduledFuture<Boolean> countdown = scheduler.schedule(new Callable<Boolean>() {
    public Boolean call() {
        return attemptRetrieval(...);
    }}, 1, TimeUnit.MINUTES);

return countdown.get();


请注意,此方法将一直阻塞,直到计划的呼叫完成为止。

09-10 08:03
查看更多