2012-07-20 11 views
9

इंटरफ़ेस SetObserver के लिए यह कोड स्निपेट प्रभावी जावा से लिया जाता है (बचें अत्यधिक तुल्यकालन मद 67)जावा में कॉल बैक इंटरफ़ेस क्या है?

public interface SetObserver<E> { 
// Invoked when an element is added to the observable set 
void added(ObservableSet<E> set, E element); 
} 

और SetObserveraddObserver() और removeObserver विधि से पारित हो जाता है के रूप में नीचे दिए गए:

// Broken - invokes alien method from synchronized block! 
public class ObservableSet<E> extends ForwardingSet<E> { 
    public ObservableSet(Set<E> set) { 
    super(set); 
    } 

    private final List<SetObserver<E>> observers = 
     new ArrayList<SetObserver<E>>(); 

    public void addObserver(SetObserver<E> observer) { 
    synchronized (observers) { 
     observers.add(observer); 
    } 
    } 



    public boolean removeObserver(SetObserver<E> observer) { 
    synchronized (observers) { 
     return observers.remove(observer); 
    } 
    } 



    private void notifyElementAdded(E element) { 
    synchronized (observers) { 
     for (SetObserver<E> observer : observers) 
     observer.added(this, element); 
    } 
    } 

ब्लोच SetObserver<E> इंटरफ़ेस को कॉल बैक इंटरफेस के रूप में संदर्भित करता है। जावा में कॉल बैक इंटरफ़ेस नामक एक इंटरफ़ेस कब होता है?

+0

के संभावित डुप्लिकेट [कॉलबैक फ़ंक्शन है क्या?] (Http://stackoverflow.com/questions/824234/what-is-a-callback-function) – assylias

+1

'ObservableSet ' एक नहीं है इंटरफ़ेस, मुझे लगता है कि आपका मतलब है 'SetObserver ' –

+0

@AlonsoDominguez हाँ यह एक टाइपो था। अभी सवाल संपादित कर रहा है। – Geek

उत्तर

10

इंटरफ़ेस के लिए "कॉलबैक इंटरफ़ेस" होने की सामान्य आवश्यकता यह है कि इंटरफ़ेस कॉलर के अंदर कोड को कॉल करने का तरीका प्रदान करता है। मुख्य विचार यह है कि कॉलर के पास कोड का एक टुकड़ा होता है जिसे किसी अन्य घटक के कोड में कुछ होने पर निष्पादित करने की आवश्यकता होती है। कॉलबैक इंटरफेस इस कोड को घटक के रूप में पास करने का एक तरीका प्रदान करते हैं: कॉलर एक इंटरफ़ेस लागू करता है, और कैली अपने तरीकों में से एक को आमंत्रित करता है।

कॉलबैक तंत्र अलग-अलग भाषाओं में अलग-अलग लागू किया जा सकता है: सी # में कॉलबैक इंटरफेस के अलावा प्रतिनिधियों और कार्यक्रम हैं, सी में ऐसे फ़ंक्शन हैं जो पॉइंटर द्वारा पारित किए जा सकते हैं, उद्देश्य सी में प्रतिनिधि प्रोटोकॉल हैं, और इसी तरह। लेकिन मुख्य विचार हमेशा एक जैसा होता है: कॉलर एक निश्चित घटना की घटना पर कॉल करने के लिए कोड का एक टुकड़ा पास करता है।

+0

मैं गलत हो सकता हूं, लेकिन जावा के मामले में यह कहना सही नहीं होगा कि कैली इंटरफ़ेस लागू करता है ताकि कॉलर इसे वापस कॉल कर सके और दूसरी तरफ नहीं? क्षमा करें, मुझे पता है कि यह जवाब लगभग 3 साल पुराना है। – stevenelberger

+0

@stevenelberger मुझे लगता है कि वर्तमान विवरण सही है: कॉलर एक इंटरफ़ेस लागू करता है, यह कैली को कार्यान्वयन देता है, और कैलीली आवश्यकतानुसार कार्यान्वयन के तरीकों को वापस कॉल करता है। – dasblinkenlight

1
+5

उत्तर में किसी भी सामग्री के बिना ब्लॉग को लिंक संलग्न करना बुरा विचार है, यह ब्लॉग रोगग्रस्त हो सकता है और आपका उत्तर अमान्य हो जाएगा। – MariuszS

संबंधित मुद्दे