जब मैंने जावा में ईवेंट को कैसे आग लगाना सीखा, तो मैं EventListenerList से परिचित हो गया। जब मैं अपने खुद के श्रोताओं बनाने के लिए, मैं श्रोता लिखने तो यह EventListener फैली हुई है, मैं उन्हें एक EventListenerList में स्टोर, और मेरे आग विधि इस तरह घटना श्रोताओं के माध्यम से जाना होगा:श्रोताओं के सामान्य संग्रह के बजाय EventListenerList का उपयोग कब करें
protected void fireChangeOccurred(Change change) {
Object[] listeners = listenerList.getListenerList();
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i]==ChangeListener.class) {
((ChangeListener)listeners[i+1]).changeOccurred(change);
}
}
}
अब मैं की समीक्षा कर रहा हूँ कोड है कि बस एक HashMap में श्रोताओं डालता है (किसी भी संग्रह किया जा सकता है), श्रोता इंटरफ़ेस EventListener विस्तार नहीं करता है, और आग विधि इस प्रकार है:
protected void fireChangeOccurred(Change change) {
for (ChangeListener listener : listeners) {
listener.changeOccurred(change);
}
}
क्या EventListenerList का उपयोग कर के बजाय सिर्फ अपने ही बनाए रखने के फायदे हैं श्रोताओं की सूची? क्या यह वाकई केवल तभी मायने रखता है जब श्रोताओं स्विंग घटक में हों - क्या यह इवेंट डिस्पैच थ्रेड के लिए महत्वपूर्ण है?
बस यह सुनिश्चित करने के लिए कि आप जानते हैं, वे 2 लूप समान नहीं हैं - पहला वाला अंतिम-से-पहले होता है, और दूसरा पहला-से-आखिरी बार पुनरावृत्त होता है। यदि श्रोता को स्वयं को हटाने की अनुमति है (जो वे आमतौर पर होते हैं), तो आप अगले श्रोता को छोड़ने से रोकने के लिए अंतिम-से-पहले पुनरावृत्ति करना चाहेंगे यदि वर्तमान वाला स्वयं को हटा देता है। –