Страницы

Поиск по вопросам

суббота, 13 октября 2018 г.

Java 8, Философия java, внутренние классы

Здравствуйте! Почему код внизу не работает в java 7 (предупреждение компилятора), а в java 8 работает?
interface Destination{ String readLabel(); } public class Parcel9 { // Argument must be final to use inside // anonymous inner class: public Destination destination(String dest) { return new Destination() { private String label = dest; public String readLabel() { return label; } }; } public static void main(String[] args) { Parcel9 p = new Parcel9(); Destination d = p.destination("Tasmania"); System.out.println(d.readLabel()); } }


Ответ

В 8 яве компилятор сам вычисляет, является ли использованная вами переменная фактически финальной (т.е. вы не пытаетесь ей что-то присвоить) и позволяет скомпилировать, неявно подставив final
В 7 яве такого механизма нет и вам надо объявить аргумент как final для того, чтобы код скомпилировался.

Комментариев нет:

Отправить комментарий