मैं जावा का उपयोग कर रहा हूं। मुझे निजी एक्सेस संशोधक का उपयोग करके पता है जिसे हम प्रतिबंधित कर सकते हैं। लेकिन प्रतिबिंब API का उपयोग करके मैं कक्षा के बाहर चर का उपयोग कर सकता हूं। फिर यहां निजी संशोधक का उपयोग क्या है?जावा में कक्षा के बाहर पहुंचने के लिए वेरिएबल को प्रतिबंधित कैसे करें?
उत्तर
क्योंकि प्रतिबिंब encapsulation तोड़ता है। यदि आपका एप्लिकेशन सुरक्षा प्रबंधित वातावरण में चल रहा है तो आप प्रतिबिंब एपीआई के उपयोग को रोक सकते हैं। Java Security Manager
private
आपको जावा का उपयोग करके अन्य कक्षाओं से इसे एक्सेस करने से रोकता है। हालांकि जेएनआई या पुस्तकालय का उपयोग करके आप चीजों को अलग-अलग कर सकते हैं। आप एक सुरक्षा प्रबंधक के साथ प्रतिबिंब को रोक सकते हैं लेकिन इसकी शायद ही कभी आवश्यकता है।
नोट: सीरियलाइजेशन जैसे कुछ पुस्तकालयों को निजी क्षेत्रों तक काम करने में सक्षम होना चाहिए।
+1। ओपी को, कृपया ध्यान दें कि प्रतिबिंब को रोकने से आपके इंटरऑपरेबिलिटी को कई जावा पुस्तकालयों के साथ तोड़ दिया जाएगा जो आप उपयोग करना चाहते हैं। – Perception
@ धारणा और कुछ चीजें पुस्तकालय प्रतिबिंब के साथ करते हैं (नो-एर्ग कन्स्ट्रक्टर जो मौजूद नहीं हैं, इसलिए अंतिम तोड़ना आदि) आपके कोड में संभावित चरम परिवर्तन हैं। कई बार मैं सिर्फ अपनी आंखें बंद करता हूं और प्रार्थना करता हूं कि वे सही काम कर रहे हैं। :-) – user949300
@ user949300 - निश्चित रूप से। हालांकि, क्या आप कल्पना कर सकते हैं कि हाइबरनेट जैसी लाइब्रेरी प्रतिबिंबित करने और बाइट इंजीनियर वर्गों की क्षमता के बिना कैसा दिखाई देगी? – Perception
तो निजी संशोधक यहाँ
private
संशोधक एक सुरक्षा तंत्र नहीं है के उपयोग क्या है; यह एक encapsulation तंत्र (एक हिस्सा) है। किसी वस्तु के आंतरिक उपभोग से छिपाने से सार्वजनिक उपभोग से ऑब्जेक्ट्स को एक सतत, प्रयोग योग्य स्थिति में रखने में मदद मिलती है, जबकि ऑब्जेक्ट के कौन से हिस्से सार्वजनिक इंटरफ़ेस लिखते हैं (और बदलने के लिए भरोसा नहीं किया जा सकता है) के बारे में टिप्पणी प्रदान करते हैं।
निश्चित रूप से, उपयोगकर्ता private
फ़ील्ड में डेटा तक पहुंचने के लिए प्रतिबिंब का उपयोग कर सकते हैं, लेकिन उन्हें पता चलेगा कि वे ऐसा कुछ कर रहे हैं जो लाइब्रेरी द्वारा समर्थित नहीं है।
मैं जावा सुरक्षा सामग्री पर कोई विशेषज्ञ नहीं हूं, लेकिन मुझे लगता है कि आपको अपना स्वयं का सुरक्षा प्रबंधक प्रदान करना होगा और चेकमम्बरएप() को ओवरराइड करना होगा। उदाहरण के लिए, सभी प्रतिबिंब
public void checkMemberAccess(Class<?> clazz, int which) throws AccessControlException {
if (which != Member.PUBLIC) {
throw new AccessControlException("No reflection on non-public fields allowed");
}
}
को रोकने के लिए जाहिर है, असली दुनिया में, आप केवल पहला तर्क में "महत्वपूर्ण" वर्गों की एक निश्चित सबसेट के लिए जाँच करने के लिए चाहते हो सकता है। और, जैसा कि कई अन्य प्रतिक्रियाओं में उल्लेख किया गया है, इससे कई तृतीय पक्ष पुस्तकालयों के लिए समस्याएं पैदा होंगी।
- 1. एक क्लास वेरिएबल बंद करने के लिए कैसे कॉल करें?
- 2. जेएनआई जावा ऑब्जेक्ट (इंटीजर) तक पहुंचने के लिए कैसे करें
- 3. जावा में निजी विधियों और रचनाकारों तक पहुंचने के लिए डेवलपर्स को प्रतिबिंब का उपयोग करने के लिए कैसे प्रतिबंधित करें?
- 4. अनुप्रयोगों में सामग्री प्रदाता डेटा को प्रतिबंधित करने के लिए
- 5. SQL सर्वर 2008 में केवल एक स्कीमा की ऑब्जेक्ट तक पहुंचने के लिए उपयोगकर्ता को प्रतिबंधित कैसे करें?
- 6. मैं कक्षा को केवल किसी अन्य वर्ग के भीतर रचनात्मक बनाने के लिए कैसे प्रतिबंधित कर सकता हूं?
- 7. जावा में विरासत को प्रतिबंधित करने के अच्छे कारण?
- 8. परियोजना के बाहर फाइलों के लिए, जावा में फ़ाइल से आईफाइल में कैसे परिवर्तित करें?
- 9. पैकेज-प्राइवेट विधियों तक पहुंचने वाले वर्गों के बाहर
- 10. जावा प्रिंटिंग स्ट्रिंग वेरिएबल
- 11. कक्षा के बाहर काम करने के लिए अनुवाद कैसे प्राप्त करें?
- 12. Yii केवल पढ़ने के लिए डेटाबेस कनेक्शन को प्रतिबंधित करें
- 13. क्या जावा में कक्षा चर के मुकाबले अंतिम स्थानीय चरों तक पहुंचने में तेज़ी है?
- 14. एक स्ट्रिंग वेरिएबल को समय-समय पर C++ में टाइप करने के लिए कैसे परिवर्तित करें?
- 15. एक्सकोड में वर्तमान में प्रोजेक्ट खोलने के लिए 'त्वरित रूप से दायरे को खोलें' प्रतिबंधित करें?
- 16. राइनो: जावा पैकेज को प्रतिबंधित करें जिसे जावास्क्रिप्ट
- 17. कक्षा निकाय के बाहर टेम्पलेट परिभाषा
- 18. विम की% कार्यक्षमता को कैसे प्रतिबंधित करें?
- 19. एप्लिकेशन में वसंत से कक्षा को कैसे बाहर निकालें?
- 20. मेरे ऐप को लैंडस्केप मोड में कैसे प्रतिबंधित करें?
- 21. वेरिएबल के नाम
- 22. किसी विशिष्ट विधि/कक्षा के लिए जावा जेआईटी अक्षम करें?
- 23. टेम्पलेट फ़ंक्शन को प्रतिबंधित करें
- 24. अमेज़ॅन एस 3 एपीआई एक्सेस को कैसे प्रतिबंधित करें?
- 25. सी ++ कक्षा प्रारंभिकरण जिसमें क्लास वेरिएबल प्रारंभिकता
- 26. जावा में एक आंतरिक कक्षा के बाहरी वर्ग उदाहरण को बदलने के लिए संभव है?
- 27. req के बाहर एक्सप्रेस में सत्र का उपयोग कैसे करें?
- 28. जावा में फैक्ट्रियों को पैकेज करने के लिए कैसे करें
- 29. टेस्टएनजी में कक्षा को कैसे बाहर निकालना है?
- 30. क्या बगजिला तक पहुंचने के लिए जावा एपीआई है?
डिफ़ॉल्ट रूप से आप प्रतिबिंब के माध्यम से निजी क्षेत्रों तक पहुंच सकते हैं? –
हां। और मुझे नहीं लगता कि जावा को "मेरे निजी क्षेत्रों पर कोई प्रतिबिंब नहीं" बताने का एक आसान तरीका है। – user949300