Раньше вроде Java в этом месте требовала чтобы локальная переменная была final?
От: dmitritch  
Дата: 18.01.19 13:24
Оценка:
Вроде раньше Java требовала чтобы локальная переменная point в таких случаях объявлялась как final или я что-то путаю?

private void showAddVerticeBox() {
    Point point = getAddedPointCoordinates();

    if(addPointBox == null) {    
        addPointBox = new PopupPanel();
        Button plusButton = new Button();
        addPointBox.add(plusButton);
        
        plusButton.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                addNewPoint(point);
            }
        });
    }
    
    addPointBox.show();
}


Написал такой код потом сидел думал почему у меня при втором и последующем вызове метода добавляется та же точка что и в первый раз А значение локальной переменной оказывается захватывается и потом используется как ни в чем не бывало во всех последующих вызовах
java
Re: Раньше вроде Java в этом месте требовала чтобы локальная переменная была fin
От: C0s Россия  
Дата: 18.01.19 13:41
Оценка: +4
Здравствуйте, dmitritch, Вы писали:

D>Вроде раньше Java требовала чтобы локальная переменная point в таких случаях объявлялась как final или я что-то путаю?


раньше — да, потом добавили effectively final
Re: Раньше вроде Java в этом месте требовала чтобы локальная
От: GarryIV  
Дата: 18.01.19 13:43
Оценка:
Здравствуйте, dmitritch, Вы писали:

D>Вроде раньше Java требовала чтобы локальная переменная point в таких случаях объявлялась как final или я что-то путаю?


Да, с Java 8 так. См effectively final. Вкратце, если ты не меняешь значение переменной то она автоматом final.

Кстати там еще functional interface придумали и lambda. Так что теперь можно писать

plusButton.addClickHandler(event -> addNewPoint(getAddedPointCoordinates()));
WBR, Igor Evgrafov
Отредактировано 18.01.2019 13:51 GarryIV . Предыдущая версия . Еще …
Отредактировано 18.01.2019 13:50 GarryIV . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.