"ในที่สุดก็เป็นบทเรียนเล็ก ๆ น้อย ๆ เกี่ยวกับยาชื่อสามัญ"

"ตอนนี้ฉันจะบอกวิธีหลีกเลี่ยงการลบประเภท"

"อ่า นั่นคือสิ่งที่ฉันอยากรู้"

"อย่างที่คุณคงทราบอยู่แล้วว่า 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 ของตัวเองด้วยกระบองและ..."

“ได้สิ ฉันเหนื่อยมาทั้งวันแล้ว ไว้ครั้งหน้านะ”

"ลาก่อน ฤๅษี และขอบคุณสำหรับบทเรียนที่น่าสนใจเช่นนี้"