我偶然发现了这个从匿名内部类获取值到在外部类中声明的变量的技巧。它有效,但感觉就像一个肮脏的黑客:
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];
}
(是的,我意识到这个例子可以用 simple 代替JOptionPane
,但我的实际对话框要复杂得多。)内部函数坚持认为它与之交互的所有变量都是final
,但我不能将其声明myValue
为 final,因为内部函数需要为其分配一个值。将其声明为 1 元素数组可以解决此问题,但似乎它可能是一个 Bad Thing TM。我想知道a.)这是常见的做法还是b.)这样做可能会导致任何严重的问题。