เหตุใดฉันจึงต้องสนใจว่า Java ไม่ได้มีการ reified generics
สิ่งนี้เกิดขึ้นเป็นคำถามที่ฉันถามในการสัมภาษณ์เมื่อเร็ว ๆ นี้เนื่องจากมีบางสิ่งที่ผู้สมัครต้องการเห็นเพิ่มเข้าไปในภาษา Java โดยทั่วไปมักถูกระบุว่าเป็นความเจ็บปวดที่ Java ไม่ได้ทำให้เกิดชื่อสามัญแต่เมื่อถูกผลักดันผู้สมัครไม่สามารถบอกฉันได้ว่าสิ่งต่างๆที่เขาสามารถทำได้คือสิ่งเหล่านี้ เห็นได้ชัดว่าเนื่องจากชนิดดิบเป็นสิ่งที่อนุญาตใน Java (และการตรวจสอบที่ไม่ปลอดภัย) จึงเป็นไปได้ที่จะล้มล้าง generics และลงเอยด้วยสิ่งList<Integer>นั้น (ตัวอย่าง) มีStrings อยู่จริง สิ่งนี้ชัดเจนว่าเป็นไปไม่ได้คือข้อมูลประเภท reified; แต่ต้องมีมากกว่านี้ ! ผู้คนสามารถโพสต์ตัวอย่างของสิ่งที่พวกเขาอยากทำจริงๆได้หรือไม่มี reified generics ฉันหมายถึงเห็นได้ชัดว่าคุณสามารถหาประเภทของ a Listat runtime ได้ แต่คุณจะทำอย่างไรกับมัน? public <T> void foo(List<T> l) { if (l.getGenericType() == Integer.class) { //yeah baby! err, what now? แก้ไข : การอัปเดตอย่างรวดเร็วสำหรับสิ่งนี้เนื่องจากคำตอบดูเหมือนส่วนใหญ่จะเกี่ยวข้องกับความจำเป็นในการส่งClassเป็นพารามิเตอร์ (ตัวอย่างEnumSet.noneOf(TimeUnit.class)) ฉันถูกมองมากขึ้นสำหรับบางสิ่งบางอย่างตามสายของที่นี้ก็เป็นไปไม่ได้ …