¿Por qué solo las variables finales son accesibles en la clase anónima?

a solo puede ser final aquí. ¿Por qué? ¿Cómo puedo reasignara enonClick() método sin mantenerlo como miembro privado?

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

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

        }
    });
}

¿Cómo puedo devolver el5 * a cuando hizo clic? Quiero decir,

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

Respuestas a la pregunta(13)

Su respuesta a la pregunta