KompyuterlarDasturlash

Java Generics: Sharh va usullari

Java tilida paydo bo'lgan boshlab, hech shubhasiz, uning faoliyati ijobiy lahzalar olib o'zgarishlar, ko'p ro'y berdi. Bu muhim o'zgarishlardan biri Java umumiy yoki Umumiy joriy etish hisoblanadi. Bu xususiyatlar faqat til yanada moslashuvchan va ko'p tomonlama, balki ma'lumotlarni turlarini olib bo'yicha ko'p xavfsizroq qilish emas.

haqiqat Java umumiy kod tovar joriy oldin turi Referent nuqtai nazaridan emas, balki faqat, yaratilgan bo'lishi mumkin emas. Bunday ishoratlar har qanday ob'ekt berilishi mumkin. Axir, Java sinflar shubhasiz ob'ektni sinf voris bo'ladi. Biroq, bu yondashuv maqsad turi ob'ekt bir ob'ektga zohiriy konvertatsiya xavfsizlik turlari bilan bog'liq ko'plab xatolar potentsial manbai hisoblanadi. umumlashma ishlatilayotgan hamma izlar xatolar uchun ham salohiyatga bartaraf bilvosita va avtomatik ravishda amalga oshiriladi.

Java Generics: Sharh va namuna

AQSh quyidagi tarzda muntazam sinflar uchun umumlashtirish qo'llash oddiy misolni ko'rib chiqaylik. Va keyin barcha nozik va Java umumiy nüansları batafsil ko'rikdan o'ting.

sinf deklaratsiya Pair sodir bo'lgan yo'l e'tibor. Darhol sinf nomi so'ng, xat T. ko'rsatilgan ochiq burchak qavslardan, ma'lum bir turi bilan almashtiriladi, bu sinfning bir misol yaratish jarayonida bo'lgan plomba bir xil, deb. quyidagicha ko'rinadi: Pair obj = Nyu-Pair (). Bu o'rniga T T, V, yoki E. foydalanish, qoida tariqasida, biron-bir harfni, lekin mumkin, deb ta'kidlash lozim

Eslatma: bo'sh qoldirilishi mumkin konstruktor yozuvlar burchakli qavs e'lon, maqsad turini bildirib, Java sakkizinchi versiyasi bilan boshlangan. misol yuqorida sifatida qayta yozilgan bo'lishi mumkin, shuning uchun: Pair obj = Nyu-Pair <> ().

a sinf joylari, uzumzorlar, bu xat foydalanishingiz mumkin yo'llar bilan qaytib muayyan ob'ekt turlari o'rniga uning tanasida keyin, bunday tarzda e'lon qilingan. T yildan sinf ob'ekt bu holda birinchi va ikkinchi maydonlarni turi Integer bo'ladi muayyan turiga, o'rniga yaratishda.

dalillar va firstItem secondItem qoidasi quyidagi, shuningdek, turi Integer yoki kichik guruhi bo'lishi kerak tegishli konstruktor ataladi. Agar ob'ekt yaratish paytida belgilangan nima farq bo'lgan ma'lumotlar turini uzatish uchun harakat bo'lsa, kompilyator bu xato yo'l qo'ymayman. Shunday qilib, bir ob'ekt sifatida bo'ladi vajlari konstruktor quyidagicha: Pair obj = Nyu-Pair <> (yangi Integer (1), yangi Integer (2)). Shu dalillar va usullari setFirst setSecond uchun amal qiladi. Va siz ehtimol, usullari GetFirst getSecond bildi ayting va turi Integer bir qiymatini qaytadi, deb.

bir necha parametrlar sinf turlari bilan umumiy

umumiy sinflarda ham vergul bilan burchagi qavs ichida belgilangan turdagi bir nechta parametrlari e'lon mumkin. Pair sinf quyida keltirilgan bir holatda tomonidan qayta ishlangan.

Ko'rib turganingizdek siz burchagi qavs ichida bu sinfning bir misol yaratgandan so'ng, parametr sifatida turlari shu sonini ko'rsatadi kerak. Agar xaritasi ma'lumotlar tarkibini, bu turi bilan tanish bo'lsangiz, u aynan shu tamoyilini foydalanadi ko'rishingiz mumkin. qiymati turini - bor, birinchi argument kaliti turini, va ikkinchi belgilaydi. Bu bilan yuqadigan turlari bir ob'ekt vajlari ustiga o'raydigan mumkin bo'lsa, ta'kidlash lozim. Misol uchun, quyidagi E'lon Pair sinf holat mutlaqo to'g'ri: Pair obj.

Umumiy ba'zi xususiyatlari

yanada borishdan oldin, u Java kompilyator sinf Pair turli versiyalarini yaratish emas, deb ta'kidlash lozim. Aslida, bir umumiy turi Hamma ma'lumot kompilyatsiya jarayonida o'chiriladi. Buning o'rniga, siz Pair sinf maxsus versiyasini yaratish, tegishli turdagi olib. Biroq, dastur hali sinf faqat bir umumiy versiyasi bor. Bu jarayon Java Umumiy tozalash turi deyiladi.

muhim nuqtasini bering. Shu java umumiy sinf turli versiyalari uchun Links bir xil ob'ektga ishora mumkin emas. Pair obj1 va juft obj2: Bu, biz ikki yo'nalishlarga ega deylik etiladi. Binobarin, chiziq obj1 = obj2 xato. Har ikki o'zgaruvchilar Pair turdagi bo'lsa-da, ob'ektlar ular murojaat qilish, har xil. Bu Java umumiy xavfsizlik turlari bosh namunasidir.

umumiy sinflar bo'yicha cheklovlar

Bu umumlashma turdagi murojaat qilish uchun faqat qo'llanilishi mumkin, deb bilish muhim ahamiyatga ega, deb parametrlarni sinf turi bo'lishi kerak umumiy sinf java mustaqil o'zgarmaydigan o'tkazishga hisoblanadi. ikki yoki uzoq, masalan, Bu oddiy turlari, berilishi mumkin emas. Boshqa so'zlar bilan aytganda, quyidagi yo'l Pair sinf deklaratsiya ruxsat berilmaydi: Pair obj. Har bir ibtidoiy turi uchun mos keladigan Java sarmalayıcı sinf bor Biroq, bu cheklash, bir jiddiy muammo emas. Sirasini aytganda, sinf Pair Tamsayı va Boolean qiymati avtoupakovka hamma narsani sizlar uchun qiladi kapsüllemek bo'lsangiz: Pair obj = Nyu-Pair <> (25, haqiqiy).

Yana bir jiddiy cheklash parametr turiga misol yaratish Ishonchsizlik. Misol uchun, quyidagi liniyasi bo'lgan derleme xatosi sabab bo'ladi: T birinchi = new T (). bir argument to'liq sinf yoki mavhum, hatto interfeysi o'tgan bo'lsin sizga oldindan bilmayman, chunki bu, ochiq-oydin bo'ladi. Shu-ketliklar yaratish uchun ketadi.

cheklangan turlari

u umumiy sinfini Java uchun argument sifatida uzatiladi mumkin turlari ro'yxatini cheklash zarur bo'lsa ko'pincha vaziyatlar bor. bizning sinf juftlikda Biz ularga yanada matematik operatsiyalar uchun faqat raqamli qiymatlari kapsüllemek uchun kerakli, deb faraz qilaylik. Buning uchun biz parametr turiga yuqori chegarasi aniqlash kerak bo'ladi. Bu burchakli qavs ichida o'tgan barcha dalillarni meros super reklamalar orqali amalga oshiriladi. quyidagicha Bu qarash qiladi: sinf Pair . Shu tarzda, kompilyator topadi parametrlarni T tiklash yoki soni sinf yoki uning quyi sinflarini biri bo'lishi mumkin o'rniga.

Bu oddiy qabul bo'ladi. Bunday cheklashlar, tez-tez bir xil sinf muvofiqligi turi parametrlarini ta'minlash uchun ishlatiladi. Bizning sinf juftlikda misolni ko'rib chiqaylik: sinf Pair . Bu erda biz turi t o'zboshimchalik bo'lishi mumkin sintaksik aytib, va V turi T turi yoki uning quyi sinflarini biri ham bo'lishi kerak.

"Quyi" cheklash aynan bir xil yo'l, lekin so'zi o'rniga so'zi super sehr uzaytiradi. Bu tasniflanadi sinf Pair o'rniga T, bir ArrayList, yoki meros har bir sinf yoki interfeysi yoki barpo etilgan bo'lishi mumkin, deydi.

Umumiy Java usullari va quruvchi

Java, umumlashma, shuningdek, usullari faqat sinflar uchun emas qo'llaniladigan, lekin mumkin. Misol uchun, bir umumiy usul doimiy sinfda e'lon qilinishi mumkin.

Yuqoridagi rasmda ko'rinib turganidek, reklama umumiy usul katta shartnoma emas. bir usuli Qaytish turi burchakli qavs qo'yish va ularga turi parametrlarini belgilash uchun avval etarli.

hamma narsa konstruktor shunga o'xshash tarzda amalga oshiriladi bo'lsa:

bu holatda burchak qavslardan u hech Qaytish ahamiyatga ega, chunki, dizayner nomi oldin qo'ydi. Har ikki dasturlar natijasi bo'ladi:

Integer

string

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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