KomputerPemrograman

Java Generics: deskripsi dan metode

Dimulai dengan munculnya bahasa Jawa telah mengalami banyak perubahan, yang tidak diragukan lagi membawa momen positif dalam fungsinya. Salah satu perubahan signifikan adalah pengenalan Java Generik atau generalisasi. Fungsi ini tidak hanya membuat bahasa yang lebih fleksibel dan serbaguna, tetapi juga jauh lebih aman dalam hal membawa jenis data.

Faktanya adalah bahwa sebelum pengenalan obat generik dalam kode generik Java dapat dibuat, tidak hanya dalam hal jenis Obyek referensi. link tersebut dapat ditetapkan objek apapun. Setelah semua, kelas di Jawa adalah ahli waris kelas Object implisit. Namun, pendekatan ini merupakan sumber potensial dari banyak kesalahan yang terkait dengan jenis keamanan dalam konversi jelas sebuah objek dari Objek dengan jenis sasaran. Bila menggunakan generalisasi semua gips dilakukan secara implisit dan otomatis, menghilangkan bahkan potensi kesalahan.

Java Generics: deskripsi dan contoh

Mari kita perhatikan contoh sederhana penerapan generalisasi untuk kelas reguler pada gambar di bawah. Dan kemudian lanjutkan untuk pemeriksaan rinci dari semua seluk-beluk dan nuansa Jawa Generik.

Perhatikan cara di mana deklarasi kelas terjadi Pair. Segera setelah nama kelas, kurung sudut terbuka, yang menunjukkan huruf T. Ini adalah jenis filler, yang dalam proses menciptakan sebuah instance dari kelas ini akan digantikan oleh jenis tertentu. Ini terlihat sebagai berikut: Pair obj = Pair baru (). Perlu dicatat bahwa alih-alih T dapat menentukan huruf apa saja, tetapi, sebagai aturan, menggunakan T, V atau E.

Catatan: dimulai dengan versi kedelapan dari Jawa, menentukan jenis target ketika mendeklarasikan kurung sudut acuan dalam constructor dapat dibiarkan kosong. Jadi misalnya dapat ditulis ulang seperti di atas: Pair obj = Pair baru <> ().

Ketika kelas dinyatakan sedemikian rupa, maka dalam tubuhnya bukan tipe tertentu dari bidang, link, obyek dikembalikan oleh metode yang dapat Anda gunakan surat itu. Sejak T saat membuat objek kelas diganti dengan jenis tertentu, pertama dan kedua bidang dalam hal ini akan menjadi jenis Integer.

Mengikuti logika argumen dan firstItem secondItem, disebut constructor yang sesuai juga harus dari jenis Integer atau subclass. Jika Anda mencoba untuk mengirimkan tipe data yang berbeda dari apa yang ditentukan saat membuat sebuah objek, compiler tidak akan membiarkan kesalahan ini. Dengan demikian, argumen konstruktor ketika sebuah objek akan sebagai berikut: Pair obj = Pair baru <> (Integer baru (1), Integer baru (2)). Hal yang sama berlaku untuk argumen dan metode setFirst setSecond. Dan seperti Anda mungkin menduga, metode getFirst getSecond dan akan mengembalikan nilai tipe Integer.

Generalized dengan jenis kelas beberapa parameter

Di kelas umum juga dapat mendeklarasikan beberapa parameter dari jenis yang ditetapkan dalam kurung sudut dengan koma. Dirancang ulang oleh kasus kelas Pair disajikan di bawah ini.

Seperti yang Anda lihat, ketika Anda membuat sebuah instance dari kelas ini di kurung sudut harus menunjukkan jumlah yang sama dari jenis sebagai parameter. Jika Anda sudah familiar dengan jenis struktur data sebagai Peta, Anda dapat melihat bahwa ia menggunakan persis prinsip yang sama. Ada, argumen pertama menentukan jenis kunci, dan yang kedua - jenis nilai. Perlu dicatat bahwa jenis ditularkan ketika sebuah argumen objek mungkin tumpang tindih. Sebagai contoh, iklan berikut kelas misalnya Pair adalah mutlak benar: Pair obj.

Beberapa fitur generalisasi

Sebelum pergi lebih jauh, perlu dicatat bahwa compiler Java tidak menciptakan versi yang berbeda dari Pair kelas. Bahkan, dalam proses kompilasi jenis umum semua informasi tersebut dihapus. Sebaliknya, Anda membawa jenis yang tepat, menciptakan sebuah versi khusus dari kelas Pair. Namun, dalam program masih hanya versi generik dari kelas. Proses ini disebut di Jawa Jenis membersihkan Generic.

Catatan poin penting. Link ke versi yang berbeda dari kelas generik java yang sama tidak dapat menunjuk satu dan objek yang sama. Artinya, misalkan kita memiliki dua link: Pair obj1 dan Pair obj2. Akibatnya, sejalan obj1 = obj2 kesalahan. Meskipun kedua variabel adalah dari jenis Pair , benda-benda yang mereka lihat, berbeda. Ini adalah contoh utama dari jenis keamanan di Jawa Generik.

Pembatasan kelas generik

Hal ini penting untuk mengetahui bahwa generalisasi dapat diterapkan hanya untuk referensi jenis, yaitu untuk melewati parameter generik kelas java argumen harus menjadi tipe kelas. Ini tipe sederhana, seperti, misalnya, ganda atau panjang, tidak dapat ditransfer. Dengan kata lain, baris berikut Pair kelas deklarasi tidak diperbolehkan: Pair obj. Namun, keterbatasan ini bukan masalah serius, karena ada kelas wrapper Java yang sesuai untuk setiap jenis primitif. Sebenarnya, jika Pair kelas Anda ingin merangkum integer dan Boolean nilai avtoupakovka melakukan segala sesuatu untuk Anda: Pair obj = Pair baru <> (25, true).

Keterbatasan lain yang serius adalah ketidakmampuan untuk membuat sebuah instance dari jenis parameter. Misalnya, baris berikut akan menyebabkan kesalahan kompilasi: T pertama = new T (). Hal ini jelas, karena Anda tidak tahu sebelumnya apakah argumen lulus kelas penuh atau abstrak, atau bahkan antarmuka. Hal yang sama berlaku untuk menciptakan array.

jenis terbatas

Cukup sering ada situasi ketika itu perlu untuk membatasi daftar jenis yang bisa dilalui sebagai argumen untuk java kelas generik. Mari kita berasumsi bahwa di Pair kelas kami kami ingin merangkum hanya nilai-nilai numerik untuk operasi matematika lebih lanjut pada mereka. Untuk melakukan hal ini kita perlu mendefinisikan batas atas dari jenis parameter. Hal ini diwujudkan dengan cara iklan superclass mewarisi semua argumen berlalu dalam kurung sudut. Ini akan terlihat sebagai berikut: class Pair . Dengan cara ini, compiler menemukan bahwa alih-alih parameter T dapat diganti atau kelas Jumlah atau salah satu dari subclass.

Ini adalah penerimaan umum. pembatasan tersebut sering digunakan untuk memberikan parameter jenis kompatibilitas dalam satu dan kelas yang sama. Perhatikan contoh di kelas Pair kami: class Pair . Di sini kita memberitahu compiler bahwa jenis T bisa sembarangan, dan tipe V harus baik T jenis atau salah satu subclass.

Membatasi "bawah" adalah cara yang persis sama, tapi bukannya kata meluas mengeja kata super. Kelas diklasifikasikan Pair mengatakan bahwa alih-alih T bisa diganti atau ArrayList, atau kelas atau interface yang mewarisi.

metode Java generik dan konstruktor

Di Jawa, generalisasi dapat diterapkan tidak hanya untuk kelas, tetapi juga metode. Sebagai contoh, metode generik dapat dinyatakan dalam kelas reguler.

Seperti yang terlihat pada gambar di atas, metode iklan umum bukan masalah besar. Cukup sebelum kembali jenis metode untuk menempatkan kurung sudut dan menentukan jenis parameter di dalamnya.

Jika semuanya dilakukan sama dengan konstruktor:

kurung sudut dalam hal ini diletakkan sebelum nama desainer, karena ia tidak memiliki nilai kembali. Hasil dari kedua program akan:

bilangan bulat

tali

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 delachieve.com. Theme powered by WordPress.