Страницы

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

понедельник, 9 декабря 2019 г.

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

#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());
    }
}

    


Ответы

Ответ 1



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

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

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