Giải pháp của tôi là sử dụng một phương thức trả về lớp ẩn danh đã triển khai. Các đối số thông thường có thể được truyền cho phương thức và có sẵn trong lớp ẩn danh.
Ví dụ: (từ một số mã GWT để xử lý thay đổi hộp Văn bản):
/* 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)
}
};
}
Trong ví dụ này, phương thức lớp ẩn danh mới sẽ được tham chiếu với:
textBox.addChangeHandler(newNameChangeHandler(myAxisName, myLogger))
HOẶC , sử dụng các yêu cầu của OP:
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);
final
các biến cục bộ từ phương thức kèm theo.