我有以下计时器代码,并且基于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();
请注意,此方法将一直阻塞,直到计划的呼叫完成为止。