मैंने प्रलेखन पढ़ा है, लेकिन मुझे अभी भी समझ में नहीं आता कि मुझे कौन से क्लासलोडर को तर्क के रूप में आपूर्ति करनी चाहिए। मैंने कुछ विकल्पों की कोशिश की है, लेकिन ऐसा लगता है कि यह संकलन या प्रॉक्सी के व्यवहार पर कोई प्रभाव नहीं पड़ता है। यह थोड़ा परेशान है कि मैं वर्ग लोडर तर्क के रूप में कुछ भी पास कर सकता हूं, जिसमें null
शामिल है, और कोड अभी भी ठीक काम करता है। क्या कोई इसे समझा सकता है, और मुझे बता सकता है कि अगर मैं क्लासलोडर के लिए गलत तर्क देता हूं तो किस प्रकार की त्रुटियां उत्पन्न हो सकती हैं? मुझे यह जोड़ना चाहिए कि जावा में या सामान्य रूप से क्लासलोडर क्या है, उसके बारे में मेरे पास वास्तव में एक मजबूत अंतर्ज्ञानी विचार नहीं है।मुझे कौन से क्लासलोडर को प्रॉक्सी.न्यूप्रोक्सी इंस्टेंस (...) में आपूर्ति करनी चाहिए?
उत्तर
किसी भी वर्ग को क्लासलोडर होना चाहिए, इस प्रकार हमें यहां एक देना होगा।
इंटरफ़ेस प्रकार के सभी निर्दिष्ट वर्ग लोडर के माध्यम से नाम से दिखाई देना चाहिए:
महत्वपूर्ण हिस्सा यह (the documentation for
getProxyClass()
में) है। दूसरे शब्दों में, वर्ग लोडर सीएल और हर इंटरफ़ेस मैं के लिए , निम्नलिखित अभिव्यक्ति सच होना चाहिए:Class.forName(i.getName(), false, cl) == i
तो, आप किसी भी classloader जहां एक (या अधिक) अपनी मूल classloaders की दी गई परिभाषित उपयोग कर सकते हैं इंटरफेस।
यदि null
आपके मामले में काम करता है, तो मुझे लगता है कि आपके इंटरफेस में null
क्लास लोडर (बूटस्ट्रैप लोडर) भी है - तो इससे कोई फ़र्क नहीं पड़ता कि आपने किस क्लासलोडर का उपयोग किया था। यदि आपको इंटरफेस से प्रॉक्सी बनाना है, तो आप नहीं जानते हैं, बस दिए गए पहले इंटरफेस का क्लासलोडर लें और उम्मीद करें कि आपके कॉलर ने कुछ अजीब नहीं किया है।
इसकी आवश्यकता क्यों है?
आप इस तरह यह कल्पना कर सकते हैं:
getProxyClass()
विधि बनाता है एक नया वर्ग अपने सभी इंटरफेस के सभी तरीकों को लागू करने के लिए (अगर यह अभी तक मौजूद नहीं है) कुछ बाईटकोड (उनमें से प्रत्येक बस अग्रेषण आपकेInvocationHandler
पर कॉल)।- फिर यह निर्दिष्ट किया गया क्लासलोडर के
defineClass
विधि पर इस बाइटकोड को पास करता है। - इस बाइटकोड में, आपके सभी इंटरफेस को नाम से संदर्भित किया जाता है, और वीएम अब इन इंटरफेस को हल करने के लिए उद्धृत
forName
कॉल का उपयोग करता है।
हम इस getProxyClass
इस तरह से शुद्ध जावा में किसी भी वीएम जादू के बिना इसके लिए बजाय एक मौजूदा पुन: उपयोग करने में सक्षम होने के कार्यान्वित किया जा सकता था, लेकिन हम (निर्दिष्ट एक एक अभिभावक के रूप के साथ) एक नया classloader बनाने के लिए की आवश्यकता होगी एक।
हकीकत में वहाँ, इस सिंथेटिक वर्ग के लिए एक वास्तविक बाईटकोड नहीं हो सकता है के बाद से वीएम :-)
- 1. निम्नलिखित कोड में कौन सी पंक्ति मुझे काम की मेरी इकाई को प्रतिबद्ध करनी चाहिए?
- 2. मुझे भाषा (CurrentThread.CurrentCulture) कहां सेट करनी चाहिए?
- 3. क्या मुझे पर्सफोर्स को अपरिवर्तित फाइलें जमा करनी चाहिए?
- 4. क्या मुझे STDERR या STDOUT को चेतावनियां आउटपुट करनी चाहिए?
- 5. मुझे पाइथन ऐप में एपीआई कुंजी कैसे स्टोर करनी चाहिए?
- 6. मुझे रेल 3 में एपीआई कुंजी कहां स्टोर करनी चाहिए?
- 7. मुझे किसी फ़ंक्शन में std :: स्ट्रिंग कैसे पास करनी चाहिए?
- 8. मुझे सी # में एक फ़ाइल क्यों बंद करनी चाहिए?
- 9. क्या मुझे एसवीएन में .xcodeproj फ़ाइल प्रतिबद्ध करनी चाहिए?
- 10. मुझे गितब में परियोजनाओं की सहायता कैसे शुरू करनी चाहिए?
- 11. "... लेआउट_हेइट की आपूर्ति करनी चाहिए ..." लेकिन यह मेरे स्टाइल संसाधनों में है?
- 12. क्या आंतरिक वर्ग विधियां वापसी या पाइथन में इंस्टेंस चर को संशोधित करनी चाहिए?
- 13. Django में Jquery: मुझे कौन से django ऐप्स देखना चाहिए?
- 14. _swprintf_s() का उपयोग करने के लिए मुझे कौन सी शीर्षलेख फ़ाइल शामिल करनी चाहिए?
- 15. फिटनेस- परीक्षण डेटाबेस से बात करनी चाहिए?
- 16. मुझे एक विदेशी कुंजी कहां स्टोर करनी चाहिए?
- 17. क्या मुझे सभी ईवेंट हैंडलर सदस्यता रद्द करनी चाहिए?
- 18. मुझे एक स्क्रिप्टिंग भाषा क्यों एम्बेड करनी चाहिए?
- 19. मुझे इन-एप खरीद लेनदेन रसीद कब वैध करनी चाहिए?
- 20. मुझे अपने एप्लिकेशन की "सक्रियण" कुंजी कहां स्टोर करनी चाहिए?
- 21. रेल - मुझे व्युत्पन्न विशेषताओं की गणना कहां करनी चाहिए?
- 22. मुझे एप्लिकेशन विशिष्ट सेटिंग्स कहां स्टोर करनी चाहिए?
- 23. स्प्राउटकोर क्या है और मुझे इसकी परवाह क्यों करनी चाहिए?
- 24. क्या मुझे असामान्य समाप्ति पर आवंटित स्मृति मुक्त करनी चाहिए?
- 25. मुझे डेटाबेस कनेक्शन स्ट्रिंग कहां स्टोर करनी चाहिए?
- 26. मुझे पर्ल संदर्भों की तुलना कैसे करनी चाहिए?
- 27. मुझे नल के खिलाफ कब रक्षा करनी चाहिए?
- 28. मुझे Heroku H18 त्रुटियों की व्याख्या कैसे करनी चाहिए?
- 29. मुझे ऐप इंजन पर पूर्ण-पाठ खोज कैसे करनी चाहिए?
- 30. मुझे कौन सा एंड्रॉइड मंच एसडीके चाहिए?
धन्यवाद यहाँ अपने आंतरिक जादू का उपयोग करने में सक्षम है, मैं अभी भी क्या एक classloader करता है के लिए अंतर्ज्ञान की जरूरत नहीं है । क्या आप इसके बारे में थोड़ा सा उल्लेख कर सकते हैं? मुझे अभी भी समझ में कठिनाई हो रही है कि क्लासलोडर कुछ भी करने के लिए ज़िम्मेदार होने पर एक नल क्लासलोडर संभवतः क्यों काम कर सकता है। शायद एक खिलौना उदाहरण जहां एक गलत क्लासलोडर दिया जाता है? – jonderry
'शून्य' क्लासलोडर "बूटस्ट्रैप क्लासलोडर" है, क्लासलोडर जो कोर क्लास (जैसे 'क्लास', 'ऑब्जेक्ट', 'क्लासलोडर') लोड करता है। इसे वीएम द्वारा मूल रूप से लागू किया गया है और इसमें क्लासलोडर ऑब्जेक्ट नहीं है। (इसका उपयोग कक्षा द्वारा किया जाता है।forName' अगर आप 'null' को 'क्लासलोडर' तर्क के रूप में देते हैं, उदाहरण के लिए)। (उदाहरण बाद में आ जाएगा।) –