1. Konsep dasar obat generik
Seperti C#, Java memiliki konsep generik dan parameterisasi tipe. Generik di Java muncul setelah JDK5.0, tetapi generik di Java pada dasarnya berbeda dari generik di C#. Pertama -tama, dari perspektif jenis koleksi, ArrayList <Integer> dan ArrayList <string> di java adalah tipe yang sama. Jenis penghapusan akan dilakukan selama kompilasi, dan tipe di Java adalah pseudogenerics. Pseudogenerics akan diperkenalkan nanti. Kedua, ketika menambahkan jenis data dasar ke koleksi, seperti int, int akan dikonversi menjadi objek integer, yang biasanya kita sebut operasi tinju. Saat mengambil elemen, objek interger perlu dikonversi menjadi tipe nilai int, yaitu operasi unboxing. Di C#, daftar <TTT> dan Daftar <String> adalah tipe yang berbeda. Parameter generik akan menjadi placeholder setelah kompilasi dan tidak dihapus. Mereka ditugaskan jenis nyata saat runtime. Mereka dihasilkan selama runtime sistem dan memiliki tabel metode virtual sendiri dan mengetik data. Implementasi ini disebut inflasi tipe (untuk inflasi tipe, kompiler instan telah melakukan banyak pekerjaan optimasi untuk menyelesaikan masalah ini). Ini adalah generik sejati. Pada saat yang sama, ketika menambahkan elemen dasar seperti int ke koleksi, tidak perlu kotak, dan tidak ada unboxing yang diperlukan saat mengeluarkan elemen. Oleh karena itu, kinerja lebih baik daripada java collection generik.
Pengenalan obat generik di java terutama untuk menyelesaikan dua masalah: 1. Pengecualian penggantian jenis terjadi selama runtime dari elemen jenis koleksi, dan pemeriksaan jenis ditambahkan selama jenis waktu kompilasi. 2. Ulangi penulisan kode selama solusi, dan algoritma dapat digunakan kembali. Berikut ini adalah contoh untuk menggambarkan pemeriksaan jenis kompiler.
Pertama, mari kita lihat contoh di mana obat generik tidak digunakan:
Arraylist al = new arraylist (); al.add ("ABC"); al.add ("124"); al.add ("32l");Kami dapat menambahkan semua jenis data ke koleksi AL. Ketika kita perlu mengonversi tipe saat mengambil data, seperti:
String s = (string) al.get (0); string s1 = (string) al.get (1); // Dalam periode berjalan, kesalahan akan dilaporkan dan kesalahan konversi tipe akan panjang l = (panjang) al.get (2);
Dari sini kita dapat melihat bahwa ketika tidak ada obat generik, pemeriksaan jenis dikurangi selama kompilasi. Saat mengambil elemen, programmer perlu mengetahui jenis masing -masing elemen, jika tidak, pengecualian konversi jenis dapat terjadi saat runtime.
Jadi mari kita lihat manfaat yang dibawanya kepada kita melalui koleksi generik.
ArrayList <String> al1 = ArrayList baru <string> (); al1.add ("abc"); al1.add (1); // Terjadi kesalahan selama kompilasi,Saat kami membuat al1 dengan jenis parameter string, kami tidak dapat menambahkan elemen int, jika tidak, kompiler akan melaporkan kesalahan. Biasanya, akan ada tanda kesalahan di editor IDE, seperti gerhana. Pada saat yang sama, tidak perlu mengetik konversi saat mengekstraksi elemen.
nilai string = al1.get (0); // tidak diperlukan konversi tipe
Ini adalah manfaat dari obat generik.
Kemudian multiplexing algoritma terutama tercermin dalam multiplexing metode, seperti metode tambahan arraylist, yang dapat digunakan pada jenis apa pun atau jenis terbatas.
2. Penggunaan generik
Generik di Java terutama digunakan dalam kelas, metode, dan antarmuka. Pertama, mari kita lihat secara singkat penggunaan kelas:
Kelas Pabrik <T> {nilai T privat; public t getValue () {nilai pengembalian; } public void setValue (t v) {this.value = v; }}Tambahkan metode tes:
Factory <string> f = Factory baru <string> (); f.setValue ("Factory in digunakan"); System.out.println (f.getValue ());Penggunaan antarmuka generik:
antarmuka myinterface <t, u> {void show (t t, u u); } class showTest mengimplementasikan myinterface <string, integer> {@Override public void show (String t, integer u) {System.out.println (t); System.out.println (u); }}Ketika parameter tipe generik bertindak pada kelas, terutama membatasi batasan tipe antara beberapa bidang dan tanda tangan metode. Saat bertindak berdasarkan suatu metode, kendala utama dibuat pada beberapa parameter metode. Di sini, parameter tipe generik dari metode ini tidak akan lagi diberi contoh. Mari kita terutama memperkenalkan kendala parameter tipe di bawah ini.
3. Ketik kendala parameter
Mari kita lihat contoh kecil, seperti yang ditunjukkan pada kode berikut:
public static <T> t get (t t1, t t2) {if (t1.compareto (t2)> = 0); // kesalahan kompilasi, metode compareto (t) tidak terdefinisi untuk tipe T. return t1; }Anda dapat melihat pesan kesalahan kompiler. Metode compareto tidak didefinisikan untuk Type T. Jika jenis perlu dibandingkan dalam Java, antarmuka yang sebanding perlu diimplementasikan, sehingga metode tersebut diganti. Kemudian kami membuat modifikasi berikut:
public static <t meluas sebanding> t get (t t1, t t2) {// tambahkan ketik batasan if (t1.compareto (t2)> = 0); mengembalikan t1; }Dengan kualifikasi t meluas sebanding, ini menunjukkan bahwa t adalah jenis antarmuka yang mengimplementasikan sebanding, dan karenanya juga mengimplementasikan metode compareTo, sehingga tidak akan ada kesalahan waktu kompilasi.
Ketika kami menggunakan & untuk membagi beberapa batasan jenis, kami dapat menggunakan & untuk segmen kata kunci terbatas, dan hanya perluasan yang dapat digunakan. Pada saat yang sama, ketika kedua antarmuka dan jenis ada, kelas hanya dapat ditempatkan terlebih dahulu dan hanya dapat memilikinya, seperti yang ditunjukkan di bawah ini:
<T memperluas objek & sebanding & dapat diserialisasi>
Artikel di atas secara singkat membahas peran dan konsep dasar Java Generics adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.