Có điều đó phụ thuộc cao vào những gì bạn đang cố gắng làm. Tôi nghĩ rằng các lớp bên trong vô danh đã nhận được một rap xấu vì hai huyền thoại. Một người không thể sử dụng lại mã ẩn danh. Và hai, rò rỉ bộ nhớ. Nhưng đây là những cách dễ dàng cố định với một cách tiếp cận đơn giản. Lưu một tham chiếu đến cá thể. Đối với mã chia sẻ, chỉ cần tạo tham chiếu đến lớp bên trong ẩn danh.
Action action = new AbstractAction("Open") {...};
JButton button = new JButton(action);
JMenuItem menuItem = new JMenuItem(action);
panel.getActionMap().put("openFile", action);
Bây giờ bạn có thể sử dụng lại hành động đó trên nhiều thành phần. Đối với vấn đề sau này của rò rỉ bộ nhớ, bạn có thể sử dụng tham chiếu đó để hủy đăng ký nó, hoặc tùy chọn thứ hai và đơn giản hơn là WeakListeners. WeakListeners có lợi thế là không cần phải quản lý sau khi tạo ra chúng nhiều.
Đối với phong cách, tôi thấy người nghe Ẩn danh khá tiện dụng và trong một số trường hợp dễ đọc hơn khi xử lý luồng trong Swing vì nó giữ mã của bạn theo một phương thức (invokeLater, executeInBackground, v.v.). Khi bạn lắng nghe anon đại biểu cho một phương pháp dụ tôi nghĩ rằng nó tách mã mà bạn không thể đọc những gì đã xảy ra trước khi người nghe và logic liên kết với người nghe trong một màn hình. Họ có xu hướng bị tách ra và khó theo dõi hơn.
Điều cần lưu ý là nếu bạn sử dụng ActionMaps phần lớn các rò rỉ bộ nhớ sẽ biến mất đi cùng với việc nghe bàn phím. Thật không may những thứ như người nghe tập trung hoặc người nghe được đăng ký với hệ thống trung tâm vẫn là một vấn đề. (Một lần nữa WeakListeners là tuyệt vời ở đây). Và bạn đã có một nơi để giữ hành động với mọi thành phần, do đó không cần phải tạo các biến cá thể bổ sung để giữ nó. Nếu bạn cần tái sử dụng trên hai thành phần (nói trong thanh trình đơn và trong một điều khiển), hãy tạo một lớp riêng biệt.
Một số quy tắc chung của ngón tay cái. 1+ –
Tôi có xu hướng sử dụng một lớp bên trong có tên, và có xu hướng tạo ra những lớp đó cũng cho những người nghe nhỏ hơn nếu có rất nhiều người trong số họ để ngăn chặn mã obfuscation trong quá trình đăng ký. Vì vậy, đó sẽ là một tiêu chí thứ 3 cho tôi. – extraneon