हां यह आप जो करने की कोशिश कर रहे हैं उस पर निर्भर करता है। मुझे लगता है कि अज्ञात आंतरिक वर्गों को दो मिथकों के कारण खराब रैप मिला है। कोई अनाम कोड का पुन: उपयोग करने में सक्षम नहीं है। और दो, स्मृति रिसाव। लेकिन इन्हें आसानी से एक सरल दृष्टिकोण से तय किया जाता है। उदाहरण के लिए एक संदर्भ सहेजें। कोड साझा करने के लिए बस अज्ञात आंतरिक वर्ग का संदर्भ बनाएं।
Action action = new AbstractAction("Open") {...};
JButton button = new JButton(action);
JMenuItem menuItem = new JMenuItem(action);
panel.getActionMap().put("openFile", action);
अब आप उस क्रिया को कई घटकों में पुन: उपयोग कर सकते हैं। मेमोरी लीक की बाद की समस्या के लिए आप इसे संदर्भित करने के लिए उस संदर्भ का उपयोग कर सकते हैं, या दूसरा और सरल विकल्प WeakListeners है। WeakListeners के पास उनके निर्माण के बाद प्रबंधित करने की आवश्यकता नहीं है।
शैली के लिए मुझे बेनामी श्रोताओं को काफी आसान लगता है, और कुछ मामलों में स्विंग में थ्रेडिंग से निपटने के दौरान पढ़ने में आसान होता है क्योंकि यह आपके कोड को एक विधि (InvokeLater, executeInBackground, आदि) में रखता है। जब आप एनन श्रोता एक उदाहरण विधि में प्रतिनिधि होते हैं तो मुझे लगता है कि यह कोड को अलग करता है जहां आप श्रोता से पहले क्या हुआ और एक स्क्रीन में श्रोता से जुड़े तर्क को पढ़ नहीं सकते हैं। वे अलग हो जाते हैं, और इसका पालन करना कठिन होता है।
कुछ पता होना चाहिए कि यदि आप एक्शनमैप्स का उपयोग करते हैं तो अधिकांश मेमोरी लीक कुंजीपटल सुनने से जुड़े हो जाएंगे। दुर्भाग्य से केंद्रीय प्रणालियों के साथ पंजीकृत फोकस श्रोताओं या श्रोताओं जैसी चीजें अभी भी एक समस्या है। (फिर से WeakListeners यहां महान हैं)। और आपके पास पहले से ही प्रत्येक घटक के साथ कार्रवाई रखने के लिए एक जगह है इसलिए इसे पकड़ने के लिए अतिरिक्त आवृत्ति चर बनाने की आवश्यकता नहीं है। यदि आपको दो घटकों (मेनू बार में और नियंत्रण में कहें) में पुन: उपयोग करने की आवश्यकता है तो एक अलग वर्ग बनाएं।
अंगूठे के कुछ अच्छे नियम। 1+ –
मैं एक नामित आंतरिक वर्ग का उपयोग करता हूं, और पंजीकरण के दौरान कोड obfuscation को रोकने के लिए उनमें से बहुत से हैं, तो छोटे श्रोताओं के लिए भी उन्हें बनाने के लिए जाते हैं। तो यह मेरे लिए एक तीसरा मानदंड होगा। – extraneon