Весьма вероятно, что книга (или глава / раздел) была написана до Java 8 возраста.
Java накладывает ограничение на анонимные классы, которые могут не иметь доступа к локальной переменной, если только final.
В Java 8 это ограничение применимо и к лямбда-выражениям. Но, в дополнение к этому, Java 8 добавил понятие эффективно окончательное , что делает компилятор умнее, заставляя его определять, что переменная является конечной, потому что она не переназначается локально, тем самым делая явное использование ключевого слова final
необязательно в таких случаях.
Итак, если вы скомпилируете этот код на Java 7 или старше, вы получите ошибку компилятора, которую книга учит своих читателей избегать .