Tôi tình cờ gặp lừa này để nhận giá trị từ một lớp bên trong vô danh đến một biến được khai báo trong lớp bên ngoài. Nó hoạt động, nhưng nó cảm thấy như một hack bẩn:Sử dụng mảng 1 phần tử cuối cùng cho lớp bên trong vô danh
private int showDialog()
{
final int[] myValue = new int[1];
JPanel panel = new JPanel();
final JDialog dialog = new JDialog(mainWindow, "Hit the button", true);
dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
JButton button = new JButton("Hit me!");
button.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
myValue[0] = 42;
dialog.setVisible(false);
}
});
panel.add(button);
dialog.add(panel);
dialog.pack();
dialog.setVisible(true);
return myValue[0];
}
(. Vâng, tôi nhận ra ví dụ này có thể được thay thế bằng một đơn giản JOptionPane
, nhưng hộp thoại thực tế của tôi là phức tạp hơn nhiều) Chức năng bên trong khẳng định rằng tất cả các biến nó tương tác với là final
, nhưng tôi không thể khai báo myValue
là cuối cùng vì hàm bên trong cần gán cho nó một giá trị. Khai báo nó như là một mảng 1 phần tử được xung quanh vấn đề này, nhưng có vẻ như nó có thể là một Bad Thing TM bằng cách nào đó. Tôi tự hỏi nếu a.) Đây là thực tế phổ biến hoặc b.) Có bất kỳ vấn đề nghiêm trọng mà có thể kết quả từ việc này.
Điểm tốt về điều 'int' so với' Số nguyên', nhưng trên thực tế, có nhiều loại khác nhau (không phải thường là nguyên thủy) được truy cập bởi các hộp thoại này, vì vậy đó là một điều nhỏ nhặt. Ngoài ra, vì trong trường hợp này hộp thoại là phương thức và không thể đóng được mà không nhấn nút, nó được đảm bảo khá nhiều không phải là một vấn đề. –