Ошибка переменной за пределами IF, содержащей выражение Lambda, и как структурировать код, чтобы избежать ошибки для PreJAVA

Программисты JAVA общаются здесь
Anonymous
Ошибка переменной за пределами IF, содержащей выражение Lambda, и как структурировать код, чтобы избежать ошибки для Pre

Сообщение Anonymous »

Я объявляю DeculedFuture Future = null . Затем я установил его в выражение лямбды внутри оператора if. После этого я стараюсь сделать Future.cancel (true) , но это дает ошибку компиляции: локальные переменные, на которые ссылается из выражения Lambda, должны быть окончательно или эффективно окончательно. Как я могу структурировать программу, чтобы отрицать эту ошибку и по-прежнему разрешить несколько графиков.import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class Scheduling {
public static void main(String[] args) {
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();

ScheduledFuture future = null;

if (true) {
future = scheduler.scheduleAtFixedRate(
() -> {
System.out.println("Task executed");
}, 400, 400, TimeUnit.MILLISECONDS
);
}

scheduler.schedule(() -> {
future.cancel(true); // local variables referenced from a lambda expression must be final or effectively final
scheduler.shutdown();
System.out.println("Task cancelled and scheduler shutdown");
}, 1500, TimeUnit.MILLISECONDS);
}
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... ow-to-stru

Вернуться в «JAVA»