के लिए अंतिम 1-तत्व सरणी का उपयोग करके मैंने अज्ञात आंतरिक कक्षा से एक चर को बाहरी वर्ग में घोषित करने के लिए इस चाल में ठोकर खाई। यह काम करता है, लेकिन यह एक गंदा हैक की तरह लगता है:गुमनाम आंतरिक कक्षा
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];
}
(। हाँ, मैं इस उदाहरण एक साधारण JOptionPane
साथ प्रतिस्थापित किया जा सकता है एहसास, लेकिन मेरी वास्तविक संवाद और अधिक जटिल कर रहे हैं) भीतरी समारोह का कहना है कि सभी चर यह final
होने के साथ इंटरैक्ट करता है, लेकिन मैं myValue
को अंतिम के रूप में घोषित नहीं कर सकता क्योंकि आंतरिक फ़ंक्शन को इसे एक मान असाइन करने की आवश्यकता होती है। इसे 1-तत्व सरणी के रूप में घोषित करने से इस समस्या के आसपास हो जाता है, लेकिन ऐसा लगता है कि यह किसी भी तरह की खराब बात टीएम हो सकती है। मैं सोच रहा हूं कि ए।) यह सामान्य अभ्यास है या बी।) ऐसी कोई गंभीर समस्या है जो ऐसा करने से हो सकती है।
'int' बनाम 'इंटेगर' चीज़ पर अच्छा बिंदु, लेकिन हकीकत में, कई अलग-अलग प्रकार (आमतौर पर आदिम नहीं) हैं जिन्हें इन संवादों द्वारा उपयोग किया जाता है, इसलिए यह मामूली बात है। इसके अलावा, चूंकि इस मामले में संवाद मोडल है और बटन को मारने के बिना बंद नहीं किया जा सकता है, यह बहुत अधिक गारंटी नहीं है कि कोई समस्या न हो। –