जावा "मिटाकर" जेनरिक लागू करता है। इसका मतलब है कि रनटाइम पर (लगभग) जेनेरिक का कोई ज्ञान नहीं है। इसके बजाए, जेनेरिक के लिए कंपाइलर जांच करता है, लेकिन कवर के तहत यह ऑब्जेक्ट (या निकटतम जेनेरिक सीमा तक) में सब कुछ बदल देता है।
आपको लगता है कि विधि डिकंपाइल javap का उपयोग कर रहे हैं, तो आप देखेंगे कि इसे पढ़ता है:
public Object search(...
टी करने के लिए हर संदर्भ हटा दिया है।
ऐसा जैसी निर्माणों के साथ JRE कक्षाओं में अक्सर भी देखा जा सकता है जावा, में जेनरिक की एक गंभीर सीमा है:
SomeClass<String> x = new SomeClass<String>(String.class);
कहाँ स्ट्रिंग (String.class) के तीसरे पुनरावृत्ति क्योंकि निर्माता की जरूरत है यह जानने की जरूरत है कि यह किस वर्ग पर चल रहा है।
यह प्रतिमान, भयानक होने के बावजूद, आपकी समस्या का समाधान कर सकता है।
जेनिक्स के बारे में जानकारी वास्तव में .class फ़ाइलों में मेटाडेटा के रूप में निहित हैं, इन्हें प्रतिबिंब का उपयोग करके निरीक्षण किया जा सकता है और कुछ हद तक हल किया जा सकता है। हालांकि, यह आपके जैसे किसी मामले में संभव नहीं है, लेकिन उदाहरण के लिए यह सूची प्राप्तकर्ताओं पर ओआरएम द्वारा उपयोग किया जाता है।
public List<Group> getGroups() {
हाइबरनेट द्वारा निरीक्षण किया जा सकता है इतना है कि यह जानता है कि सूची समूह के उदाहरण धारण करने के लिए, उसके अनुसार अपना प्रश्नों अनुकूल माना जाता है: उदाहरण के लिए, हाइबरनेट, इस तरह की एक गेटर का उपयोग कर।
(हालांकि, जेनिक्स जहां इस तरह से लागू नहीं किया गया है, टी भी एक उदाहरण नहीं है, यह एक वर्ग है, स्ट्रिंग उदाहरण स्ट्रिंग का लेखन समान रूप से गलत है। यह होना चाहिए (टी .equals (String.class))
इस शानदार स्पष्टीकरण के लिए बहुत बहुत धन्यवाद, जैसे ही एसओ मुझे अनुमति देता है, मैं आपको जवाब दूंगा। – Farmor