यदि ऑब्जेक्ट के विशेषता मान में परिवर्तन को सुनना संभव है तो मैं जावा दस्तावेज़ीकरण से नहीं प्राप्त कर सकता। मान लें कि मेरे ऑब्जेक्ट में केवल एक int विशेषता फ़ील्ड है। मुझे पल में एक क्रिया करने की ज़रूरत है, मेरी वस्तु अपनी स्थिति बदलती है। क्या यह संभव है?

2
Alessandro Sassi 25 मार्च 2017, 20:30
का संभावित डुप्लिकेट
 – 
Ahmad Sanie
25 मार्च 2017, 20:37

3 जवाब

आप जावा में पर्यवेक्षकों/अवलोकनों को देखना चाहते हैं। वे आपको वह करने की अनुमति देंगे जो आपको चाहिए।

इसके बारे में ऑनलाइन बहुत कुछ है।

यहाँ एक छोटा सा आधार है: http://docs। oracle.com/javase/7/docs/api/java/util/Observer.html

यहां और अधिक: हमें ऑब्जर्वर और ऑब्जर्वेबल का उपयोग कब करना चाहिए

4
Community 23 मई 2017, 15:01
आपका उत्तर वही लगता है जो मुझे चाहिए, लेकिन जब मैंने ऑब्जर्वेबल आयात किया और ऑब्जर्वेबल के साथ अपनी कक्षा का विस्तार किया, तब भी यह मुझे रिपोर्ट करता है कि setChanged() विधि को परिभाषित किया जाना चाहिए। अवलोकन योग्य मेरी कक्षा द्वारा विस्तारित नहीं किया जाना है
 – 
Alessandro Sassi
25 मार्च 2017, 21:19
पर्यवेक्षकों को सूचित करने में सक्षम होने के लिए आपको setChanged() को परिभाषित करने की आवश्यकता है। यहां कुछ और जानकारी दी गई है: stackoverflow.com/questions/7271044/observable-in-java और < a href="https://docs.oracle.com/javase/8/docs/api/java/util/Observable.html" rel="nofollow noreferrer">docs.oracle.com/javase/8/docs/api /java/util/Observable.html
 – 
cdignam
25 मार्च 2017, 21:24
मैंने अपनी बहुमूल्य टिप्पणी में ठीक से व्यक्त नहीं किया, मैं अभी भी अपनी कक्षा में एक वर्ग का विस्तार करता हूं, और अवलोकन योग्य भी नहीं बढ़ा सकता ...
 – 
Alessandro Sassi
25 मार्च 2017, 21:40
क्या आप अपने कार्यान्वयन के बारे में कुछ और जानकारी दे सकते हैं? तुम क्या करने की कोशिश कर रहे हो?
 – 
cdignam
25 मार्च 2017, 21:44
मेरे पास एक वर्ग है जो स्थानीयहोस्ट पर चलता है जहां ऑब्जेक्ट्स का निर्माण किया जाता है, आरएमआई के साथ मैं क्लाइंट क्लास से सर्वर क्लास पर ऑब्जेक्ट की विधि तक पहुंचता हूं। जब क्लाइंट क्लास ने ऑब्जेक्ट के तरीकों और ऑब्जेक्ट की संशोधित विशेषताओं को एक्सेस किया है, तो मुझे सर्वर क्लास के कंसोल आउटपुट पर एक नोटिफिकेशन स्ट्रिंग प्रिंट करने की आवश्यकता है।
 – 
Alessandro Sassi
25 मार्च 2017, 21:48

यदि यह वस्तु आपकी नहीं है और आप किसी वस्तु की संपत्ति के लिए घटना श्रोता की तलाश कर रहे हैं, नहीं, कोई वस्तु संपत्ति श्रोता नहीं हैं।

लेकिन, अगर आप वस्तु के स्रोत को संशोधित कर सकते हैं, तो मुझे लगता है कि आप गेटर्स और सेटर्स का उपयोग कर रहे हैं। तो, आपके पास कुछ ऐसा होगा ...

public void setIntegerValue(int num){
    this.num = num;
}

जब पूर्णांक num बदल जाता है, तो अपने फ़ंक्शन को निष्पादित करने के लिए सेटर के अंदर किसी प्रकार का तर्क जोड़ना सबसे कुशल काम है:

public void setIntegerValue(int num){
    this.num = num;
    yourFunction(); // Let your program know that num has been modified
}
1
AlgoRythm 25 मार्च 2017, 20:36
यहाँ समस्या यह है कि आपको इसे कक्षा के प्रत्येक सेटर के लिए करना होगा। यदि कोई बाद का प्रोग्रामर एक नया सेटर जोड़ता है और इसके बारे में नहीं जानता है, तो चीजें टूट जाती हैं। किसी भी बदलाव का पता लगाने का कोई तरीका नहीं है?
 – 
Samuël Visser
3 पद 2019, 13:39

यदि आप एक सेटर विधि का उपयोग करते हैं तो आप अन्य विधियों में कॉल जोड़ सकते हैं।

सबसे पहले, अपनी संपत्ति को निजी बनाएं।

private int myProp;

फिर, एक सेटर जोड़ें।

public void setMyProp(int myProp) {
    boolean isVariableChanged = myProp != this.myProp;
    this.myProp = myProp;
    // do other things
}

इस मामले में, यदि चर बदल गया है, तो विधि में बूलियन सत्य होगा, जिसका उपयोग किया जा सकता है यदि आप विधि को ट्रिगर करने से रोकना चाहते हैं यदि चर को उसके वर्तमान मान में वापस बदल दिया जाता है।

फिर आपको एक गेटर की भी आवश्यकता होगी।

public int getMyProp() {
    return myProp;
}

आम तौर पर, गेटर्स और सेटर्स को कोड को और अधिक रखरखाव योग्य बनाने की अनुशंसा की जाती है जब कक्षा के कार्यान्वयन में परिवर्तन होता है।

हालांकि, वे आपको छद्म श्रोताओं के रूप में गेटर्स और सेटर्स का उपयोग करने की क्षमता भी देते हैं।

0
Anish Goyal 25 मार्च 2017, 20:40
मैं जो करने की कोशिश कर रहा हूं वह किसी सर्वर पर मौजूद किसी ऑब्जेक्ट पर एक विधि को कॉल करना है, इसलिए आरएमआई के साथ मैं अपने क्लाइंट कंसोल पर मेहोड आमंत्रण का प्रभाव देख सकता हूं, लेकिन मुझे सर्वर कंसोल पर कुछ प्रदर्शित करने की भी आवश्यकता है
 – 
Alessandro Sassi
25 मार्च 2017, 20:40
क्या आपके पास सर्वर पर कोड तक पहुंच है? वह चर सेट कैसे है?
 – 
Anish Goyal
25 मार्च 2017, 20:42
हां, मैं सर्वर के लिए कोड का उपयोग करता हूं क्योंकि यह एक छोटा सा प्रयोग है जिसे मैं कुछ चीजों को समझने के लिए कर रहा हूं। मैं जिस चर के लिए सुन रहा हूं वह निजी सेट है
 – 
Alessandro Sassi
25 मार्च 2017, 20:45
ठीक है, तो किसी बिंदु पर आपको सर्वर साइड पर वेरिएबल के मान को सेट करने के लिए एक सेटर विधि को कॉल करना होगा। जब उस विधि को बुलाया जाता है, तो आप अपने सेटर से अन्य विधियों को कॉल कर सकते हैं।
 – 
Anish Goyal
25 मार्च 2017, 20:49