वे हल्के वजन नहीं हैं, लेकिन उनके पास सीमाएं हैं। AFAIK, आप किसी अज्ञात आंतरिक वर्ग के एक से अधिक उदाहरण नहीं बना सकते हैं, और इसलिए यदि आपकी आवश्यकताओं की आवश्यकता है, तो आपको एक गैर-अज्ञात वर्ग का उपयोग करना होगा।
संपादित करें 1: सभी टिप्पणियों और स्पष्टीकरणों के लिए धन्यवाद। कृपया मुझे यह बेहतर समझने में मदद करें ... मैं समझता हूं कि आपके पास गुमनाम आंतरिक कक्षाओं के कई उदाहरण हो सकते हैं, लेकिन अगर मैं एक अज्ञात आंतरिक एक्शनलिस्टर ऑब्जेक्ट को उदाहरण के लिए घोषित करता हूं, तो मेरे पास के कई उदाहरण कैसे हो सकते हैं जो कक्षा और केवल वह कक्षा प्रतिबिंब का उपयोग किए बिना? अग्रिम धन्यवाद (या मुझे इसे अपने प्रश्न में पूछना चाहिए?)!
ठीक है, क्योंकि मुझे कोई काटने नहीं मिल रहा है ... मुझे कोड के साथ प्रदर्शित करने दें। मैं यहाँ एक गुमनाम ActionListener बनाने कहते हैं:
JButton button = new JButton("Button");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("Button says \"Foo!\"");
}
});
JOptionPane.showMessageDialog(null, button);
मैं एक गुमनाम ActionListener बना सकते हैं और भी एक ही बार में इस वर्ग की एक वस्तु बना सकते हैं। जो मैंने हमेशा पढ़ाया है, मैंने यहां अपनी पोस्ट के शीर्ष पर जो उल्लेख किया है (और इसके लिए डिंग किया गया है) था, यह असंभव नहीं था (प्रतिबिंब के जादू के बिना) यह अज्ञात वर्ग का एक और उद्देश्य बनाने के लिए मुश्किल है, केवल एक वस्तु बनाई जा सकती है, और ऐसी स्थितियों में जहां केवल एक वस्तु की आवश्यकता होती है, यह ठीक है। लेकिन अन्य परिस्थितियों में, यह ठीक नहीं है। और यकीन है कि आप एक से अधिक समान गुमनाम ActionListener कक्षाएं एक के रूप में पाश के लिए बना सकते हैं,:
JPanel panel = new JPanel(new GridLayout(5, 5));
JButton[] buttons = new JButton[25];
for (int i = 0; i < 25; i++) {
final int btnNumber = i;
buttons[i] = new JButton(String.valueOf(btnNumber));
buttons[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("From button " + btnNumber);
}
});
panel.add(buttons[i]);
}
JOptionPane.showMessageDialog(null, panel);
लेकिन फिर भी ऐसा है, तो प्रत्येक गुमनाम यहां बनाए गए वर्ग अलग है। इसका महत्व हो सकता है यदि इस प्रकार के श्रोता का उपयोग एकाधिक जेबट्टेंस द्वारा किया जाता है, जिसमें इसका राज्य है, और इसका व्यवहार इस स्थिति पर निर्भर करता है। इस बात से सहमत? असहमत? किसी भी इनपुट के लिए पहले से ही धन्यवाद!
जेवीएम में केवल आदिम डेटा प्रकार ('int',' float', आदि) और कक्षाएं हैं। उनके बीच कुछ भी नहीं है। – Gabe