"Nah, akhirnya - satu lagi pelajaran kecil tentang generik."

"Sekarang saya akan memberitahu anda bagaimana untuk mengatasi jenis pemadaman."

"Ah. Itu yang saya nak tahu."

"Seperti yang anda mungkin sedia maklum, Java mempunyai jenis Kelas, yang digunakan untuk menyimpan rujukan kepada kelas objek. "Berikut ialah beberapa contoh:"

Contoh
Class clazz = Integer.class;
Class clazz = String.class;
Class clazz = "abc".getClass();

"Ah."

"Tetapi apa yang anda mungkin tidak tahu ialah terdapat juga kelas generik yang dipanggil Kelas. Dan pembolehubah Kelas generik hanya boleh menyimpan rujukan kepada jenis yang ditentukan oleh hujah jenis.  Berikut ialah beberapa contoh:"

Contoh
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

"Kenapa ia berfungsi seperti itu?"

"Nah, nilai medan kelas untuk Integer (iaitu Integer.class) sebenarnya ialah objek Class<Integer>."

"Tetapi mari kita teruskan."

"Mengambil kesempatan daripada fakta bahawa Class<T> — adalah generik dan pembolehubah jenis ini hanya boleh memegang nilai jenis T, anda boleh meletakkannya bersama-sama dengan cara yang licin seperti ini:"

Contoh
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
 }
}
Penggunaan
Zoo<Tiger> zoo = new Zoo<Tiger>(Tiger.class); // This is where we pass the type!
Tiger tiger = zoo.createNewAnimal();

"Ini bukan gerakan yang sangat rumit — kami hanya menghantar rujukan kepada jenis yang diingini. Tetapi, jika kami hanya menggunakan Kelas dan bukannya Kelas<T>, maka seseorang mungkin secara tidak sengaja melepasi dua jenis yang berbeza: satu sebagai hujah T , dan satu lagi kepada pembina."

"Ah. Saya faham. Tiada apa-apa perkara ghaib yang berlaku, tetapi tiada yang mengerikan juga. Terdapat rujukan kepada jenis itu, dan anda boleh menggunakannya. Ia berfungsi dan itu cukup baik untuk saya."

"Budak lelaki itu menjadi seorang lelaki! 'Ia berkesan dan itu cukup bagus untuk saya' selalunya merupakan pilihan terbaik."

"Banyak perkara boleh dibuat semula di Java sekarang, tetapi kita perlu mengekalkan keserasian dengan kod lama."

"Puluhan ribu perpustakaan popular yang digilap adalah hujah yang paling kuat untuk Java hari ini. Oleh itu, Java kekal sebagai bahasa paling popular dengan mengekalkan keserasian ke belakang, jadi ia tidak dapat memperkenalkan inovasi radikal."

"Baiklah, saya akan membina Java saya sendiri dengan blackjack dan…"

"Baiklah, saya dah penat dari hari tadi. Sampai lain kali."

"Selamat tinggal, Rishi, dan terima kasih untuk pelajaran yang menarik."