Мое решение - использовать метод, который возвращает реализованный анонимный класс.Обычные аргументы могут быть переданы методу и доступны в анонимном классе.
Например: (из некоторого кода GWT для обработки изменения текстового поля):
/* Regular method. Returns the required interface/abstract/class
Arguments are defined as final */
private ChangeHandler newNameChangeHandler(final String axisId, final Logger logger) {
// Return a new anonymous class
return new ChangeHandler() {
public void onChange(ChangeEvent event) {
// Access method scope variables
logger.fine(axisId)
}
};
}
Для этого примерана новый анонимный метод класса будет ссылаться:
textBox.addChangeHandler(newNameChangeHandler(myAxisName, myLogger))
ИЛИ , используя требования ОП:
private ActionListener newActionListener(final int aVariable) {
return new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Your variable is: " + aVariable);
}
};
}
...
int myVariable = 1;
newActionListener(myVariable);