"ในที่สุดก็เป็นบทเรียนเล็ก ๆ น้อย ๆ เกี่ยวกับยาชื่อสามัญ"
"ตอนนี้ฉันจะบอกวิธีหลีกเลี่ยงการลบประเภท"
"อ่า นั่นคือสิ่งที่ฉันอยากรู้"
"อย่างที่คุณคงทราบอยู่แล้วว่า Java มีประเภทคลาสซึ่งใช้เพื่อจัดเก็บการอ้างอิงถึงคลาสของอ็อบเจกต์ "นี่คือตัวอย่างบางส่วน:"
Class clazz = Integer.class;
Class clazz = String.class;
Class clazz = "abc".getClass();
"อา."
"แต่สิ่งที่คุณอาจไม่ทราบก็คือมีคลาสทั่วไปที่เรียกว่าคลาส และตัวแปรคลาสทั่วไปสามารถเก็บการอ้างอิงถึงประเภทที่กำหนดโดยอาร์กิวเมนต์ประเภทเท่านั้น นี่คือตัวอย่างบางส่วน:"
Class<Integer> clazz1 = Integer.class; // Everything works well
Class<String> clazz2 = Integer.class; // Compilation error
Class<String> clazz1 = String.class; // Everything works well
Class<String> clazz2 = int.class; // Compilation error
Class<? extends String> clazz1 = "abc".getClass(); // Everything works well
Class<Object> clazz2 = "abc".getClass(); // Compilation error
"ทำไมมันถึงทำงานแบบนั้น"
"ค่าของฟิลด์คลาสสำหรับ Integer (เช่น Integer.class) เป็นวัตถุ Class<Integer>"
"แต่ไปต่อกันเถอะ"
"การใช้ประโยชน์จากข้อเท็จจริงที่ว่า Class<T> — เป็นตัวแปรทั่วไปและตัวแปรประเภทนี้สามารถเก็บค่าประเภท T ได้เท่านั้น คุณสามารถรวมเข้าด้วยกันได้อย่างลื่นไหลเช่นนี้:"
class Zoo<T>
{
Class<T> clazz;
ArrayList<T> animals = new ArrayList<T>
Zoo(Class<T> clazz)
{
this.clazz = clazz;
}
public T createNewAnimal()
{
T animal = clazz.newInstance();
animals.add(animal);
return animal
}
}
Zoo<Tiger> zoo = new Zoo<Tiger>(Tiger.class); // This is where we pass the type!
Tiger tiger = zoo.createNewAnimal();
"นี่ไม่ใช่การซ้อมรบที่ยุ่งยากมาก เราแค่ส่งการอ้างอิงไปยังประเภทที่ต้องการ แต่ถ้าเราใช้ Class แทน Class<T> ก็อาจมีคนส่งประเภทที่แตกต่างกันสองประเภทโดยไม่ตั้งใจ: ประเภทหนึ่งเป็นอาร์กิวเมนต์ T และอีกอันสำหรับตัวสร้าง"
"อา ฉันเข้าใจ ไม่มีอะไรเหนือธรรมชาติเกิดขึ้น แต่ก็ไม่น่ากลัวเช่นกัน มีการอ้างอิงถึงประเภทและคุณสามารถใช้มันได้ มันได้ผลและนั่นก็ดีพอสำหรับฉัน"
"เด็กชายกลายเป็นผู้ชาย! 'มันได้ผลและนั่นก็ดีพอสำหรับฉัน' มักเป็นตัวเลือกที่ดีที่สุด"
"หลายสิ่งหลายอย่างสามารถทำซ้ำได้ใน Java ในตอนนี้ แต่เราจำเป็นต้องรักษาความเข้ากันได้กับโค้ดเก่า"
"ไลบรารีแบบขัดเงายอดนิยมหลายหมื่นรายการเป็นข้อโต้แย้งที่ทรงพลังที่สุดสำหรับ Java ในปัจจุบัน ดังนั้น Java จึงยังคงเป็นภาษาที่ได้รับความนิยมมากที่สุดโดยรักษาความเข้ากันได้แบบย้อนกลับ ดังนั้นจึงไม่สามารถนำเสนอนวัตกรรมที่รุนแรงได้"
"คือ ฉันจะสร้าง Java ของตัวเองด้วยกระบองและ..."
“ได้สิ ฉันเหนื่อยมาทั้งวันแล้ว ไว้ครั้งหน้านะ”
"ลาก่อน ฤๅษี และขอบคุณสำหรับบทเรียนที่น่าสนใจเช่นนี้"
GO TO FULL VERSION