मैं जावा में "असुरक्षित प्रतिबिंब" का स्पष्टीकरण खोजने में असमर्थ रहा हूं। मुझे यह एक ब्लॉग पोस्ट जिसमें उल्लेख किया गया है कि GSON असुरक्षित प्रतिबिंब का उपयोग करता है, लेकिन आगे कोई विवरण नहीं देता है। मुझे पता है कि प्रतिबिंब क्या है। लेकिन "असुरक्षित" प्रतिबिंब क्या है?

0
Julian A. 21 अक्टूबर 2019, 20:28
1
देखें यह और यह "असुरक्षित" प्रतिबिंब के संभावित अर्थों के लिए। मैं सोच रहा हूँ कि यह बाद वाला होगा, हालाँकि।
 – 
Avi
21 अक्टूबर 2019, 20:38
1
संभवतः यह यह पोस्ट है: GSON असुरक्षित समस्या
 – 
Mick Mnemonic
21 अक्टूबर 2019, 20:44
यह एक अलग पोस्ट था। लेकिन आपने जो उल्लेख किया है वह प्रासंगिक और सहायक हो सकता है।
 – 
Julian A.
21 अक्टूबर 2019, 20:52
मुझे लगता है कि यह असुरक्षित प्रतिबिंब आपको समझने में मदद कर सकता है
 – 
Pandey Amit
21 अक्टूबर 2019, 21:12

2 जवाब

मूल पोस्ट पर टिप्पणियों में अन्य उपयोगकर्ताओं द्वारा प्रदान किए गए लिंक से अधिक शोध और सहायता के बाद, मैं सोच रहा हूं कि "असुरक्षित प्रतिबिंब" का अर्थ है किसी भी रचनाकार का उपयोग किए बिना कक्षा आवंटित करना (यानी तत्काल)। यह प्रतिबिंब द्वारा किया जाता है। "असुरक्षित" का अर्थ यह हो सकता है कि एक इंस्टेंस का उपयोग करने के लिए सुरक्षित माना जाता है, या एक सुरक्षित स्थिति में (निर्माण का), केवल कंस्ट्रक्टरों के पूरी तरह से निष्पादित होने के बाद। संयोग से नहीं, इस उपलब्धि को हासिल करने के लिए इस्तेमाल किया जाने वाला वर्ग sun.misc.Unsafe है।

1
Julian A. 22 अक्टूबर 2019, 19:47

"असुरक्षित प्रतिबिंब" वाक्यांश का उपयोग करना, सामान्य रूप से, "खतरनाक विस्फोट" वाक्यांश का उपयोग करने जैसा है - विशेषण लगभग बेमानी है, लेकिन हम अभी भी कभी-कभी इसका उपयोग करते हैं।

परावर्तन टाइप-चेकिंग को बायपास करता है जो कंपाइलर करता है। उदाहरण के लिए, आप कुछ ऐसा करके Class<String> का एक नया उदाहरण बना सकते हैं (मैंने इसे चेक नहीं किया है)

Class<String> theStringClass = (Class<String>) Class.forName("java.lang.String")`

लेकिन यह कुछ हद तक असुरक्षित है क्योंकि अगर आपने कोई गलती की है और

Class<String> myStringClass = (Class<String>) Class.forName("java.lang.Sting")`

या

Class<String> myStringClass = (Class<String>) Class.forName("java.lang.Integer")`

कोड की लाइन वास्तव में चलने तक आपको कोई त्रुटि नहीं मिलेगी। इसके विपरीत, यदि आप कुछ ऐसा करते हैं

Class<String> myStringClass = Sting.class

संकलक आपको तुरंत एक त्रुटि देगा। तो एक सामान्य नियम के रूप में, प्रतिबिंब असुरक्षित है।

ब्लॉग-पोस्ट में, "असुरक्षित-नेस" जीएसओएन द्वारा सीधे कंस्ट्रक्टर को कॉल करने (और डिफ़ॉल्ट मान सेट करने) के बजाय article.class.newInstance() जैसा कुछ करने के कारण हो सकता है, लेकिन यह मेरे लिए तुरंत स्पष्ट नहीं है।

0
Benjamin Berman 22 अक्टूबर 2019, 02:28