Generic type की जानकारी compile time पर होती है और bytecode में मिटा दी जाती है, जहां List of String बस एक List है और compiler ने casts डाल दिए हैं। इसलिए आप किसी parameterized type के खिलाफ instanceof नहीं जांच सकते, type parameter की array नहीं बना सकते, और ऐसे दो methods overload नहीं कर सकते जो सिर्फ generic argument से अलग हों। compiler polymorphism चलाए रखने के लिए bridge methods जोड़ता है, और unchecked casts heap pollution पैदा कर सकते हैं।
इंटरव्यूअर यह क्यों पूछते हैं
यह उलझाने वाले compiler errors के पूरे परिवार की व्याख्या करता है, इसलिए इंटरव्यूअर देखना चाहते हैं कि आप तरीका समझते हैं या अंदाजे से उसके इर्द गिर्द रास्ता निकालते हैं। bounded wildcards और producer extends consumer super नियम का जिक्र बताता है कि आप generic API डिजाइन कर सकते हैं, सिर्फ इस्तेमाल नहीं। यह तब भी आता है जब किसी को runtime पर असली type चाहिए हो, जैसे किसी deserializer में।
अपना जवाब कैसे स्ट्रक्चर करें
- erasure परिभाषित करें और बताएं कि bytecode में असल में क्या होता है।
- इससे लगने वाली ठोस पाबंदियां गिनाएं।
- लचीले signatures के लिए wildcard का नियम समझाएं।
- बताएं कि जब जरूरी हो तो आप runtime पर type की जानकारी कैसे वापस पाते हैं।
उदाहरण जवाब
Generics compile time का फीचर हैं। compile होने के बाद List of String बस एक List है, और compiler ने casts डाल दिए होते हैं, जिसकी वजह से generics पीछे की तरफ compatible रह पाए। दिखने वाले नतीजे ये हैं कि मैं यह नहीं पूछ सकता कि कोई चीज किसी parameterized type का instance है या नहीं, बिना unchecked cast के type parameter की array नहीं बना सकता, और दो अलग generic arguments पर method overload नहीं कर सकता क्योंकि दोनों एक ही signature में मिट जाते हैं। इसीलिए unchecked cast की warning मायने रखती है: गलत typed list में गलत element आ सकता है और बाद में किसी बिल्कुल असंबंधित cast पर फेल हो सकता है, जो heap pollution है और सचमुच ढूंढने में खिझाता है। जब मैं API डिजाइन करता हूं तो उसे इस्तेमाल लायक बनाने के लिए bounded wildcards लेता हूं, producer extends consumer super नियम के हिसाब से, तो collection से पढ़ने वाला method उस type को extend करता wildcard लेता है। जब मुझे सच में runtime पर type चाहिए, जैसे किसी JSON library को बताना हो कि किसमें deserialize करना है, तो मैं class object पास करता हूं या ऐसा type reference लेता हूं जो anonymous subclass के जरिए parameter पकड़ ले, क्योंकि class पर लगा type argument signature में बचा रहता है।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- producer extends consumer super नियम का व्यवहार में क्या मतलब है?
- compiler bridge methods क्यों बनाता है?
- erasure के बावजूद type reference generic type कैसे पकड़ लेता है?
Java डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें