Вроде раньше 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();
}
Написал такой код потом сидел думал почему у меня при втором и последующем вызове метода добавляется та же точка что и в первый раз
А значение локальной переменной оказывается захватывается и потом используется как ни в чем не бывало во всех последующих вызовах
Здравствуйте, dmitritch, Вы писали:
D>Вроде раньше Java требовала чтобы локальная переменная point в таких случаях объявлялась как final или я что-то путаю?
раньше — да, потом добавили
effectively final
Здравствуйте, dmitritch, Вы писали:
D>Вроде раньше Java требовала чтобы локальная переменная point в таких случаях объявлялась как final или я что-то путаю?
Да, с Java 8 так. См
effectively final. Вкратце, если ты не меняешь значение переменной то она автоматом final.
Кстати там еще functional interface придумали и lambda. Так что теперь можно писать
plusButton.addClickHandler(event -> addNewPoint(getAddedPointCoordinates()));