Por que apenas variáveis finais estão acessíveis na classe anônima?

a só pode ser final aqui. Por quê? Como posso reatribuira noonClick() método sem mantê-lo como membro privado?

private void f(Button b, final int a){
    b.addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            int b = a*5;

        }
    });
}

Como posso devolver o5 * a quando clicou? Quero dizer,

private void f(Button b, final int a){
    b.addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
             int b = a*5;
             return b; // but return type is void 
        }
    });
}

questionAnswers(13)

yourAnswerToTheQuestion