CodeGym /Java Course /Modul 2: Inti Java /Generik: ? kartu pengganti

Generik: ? kartu pengganti

Modul 2: Inti Java
Level 5 , Pelajaran 3
Tersedia

"Yah, akhirnya—pelajaran kecil lainnya tentang obat generik."

"Sekarang saya akan memberi tahu Anda cara menyiasati penghapusan jenis."

"Ah. Itu sesuatu yang ingin kuketahui."

"Seperti yang mungkin sudah Anda ketahui, Java memiliki tipe Kelas, yang digunakan untuk menyimpan referensi ke kelas objek. Berikut beberapa contohnya:"

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

"Ah."

"Tetapi yang mungkin tidak Anda ketahui adalah bahwa ada juga kelas generik yang disebut Kelas. Dan variabel Kelas generik hanya dapat menyimpan referensi ke tipe yang ditentukan oleh argumen tipe.  Berikut beberapa contohnya:"

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

"Mengapa cara kerjanya seperti itu?"

"Nah, nilai bidang kelas untuk Integer (yaitu Integer.class) sebenarnya adalah objek Class<Integer>."

"Tapi mari kita lanjutkan."

"Mengambil keuntungan dari fakta bahwa Class<T> — adalah generik dan jenis variabel ini hanya dapat menampung nilai tipe T, Anda dapat menyatukannya dengan cara yang apik 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 manuver yang sangat rumit — kami hanya mengirimkan referensi ke tipe yang diinginkan. Namun, jika kami hanya menggunakan Class, bukan Class<T>, maka seseorang mungkin secara tidak sengaja memberikan dua tipe yang berbeda: satu sebagai argumen T , dan satu lagi untuk konstruktor."

"Ah. Aku mengerti. Tidak ada yang supranatural yang terjadi, tapi juga tidak ada yang buruk. Ada referensi untuk jenisnya, dan kamu bisa menggunakannya. Ini bekerja dan itu cukup bagus untukku."

"Anak laki-laki itu menjadi laki-laki! 'Itu berhasil dan itu cukup baik untukku' seringkali merupakan pilihan terbaik."

"Banyak hal yang dapat dilakukan ulang di Java sekarang, tetapi kami perlu mempertahankan kompatibilitas dengan kode lama."

"Puluhan ribu pustaka terpoles yang populer adalah argumen paling kuat untuk Java saat ini. Dengan demikian, Java tetap menjadi bahasa paling populer dengan mempertahankan kompatibilitas ke belakang, sehingga tidak dapat memperkenalkan inovasi radikal."

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

"Baik, aku sudah lelah dari hari ini. Sampai lain kali."

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

Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION