Umumiy sinflar va usullar Ushbu bo'limda siz quyidagilarni bilib olasiz




Download 99.4 Kb.
Sana01.05.2023
Hajmi99.4 Kb.
#55172
Bog'liq
piwdi
Ударе́ние, Tasviriy san\'at o\'qitish metodikasi (S.Abdirasilov), 15-dars, mashinani o\'qitish, report-2, 2-Семинар, №9 Мантиқий элементлар, @pdfustabot, Fan doirasida adabiyotlarni topish,saralash,saqlash,qyta ishlash-fayllar.org, 1.3-махсус-курс-KORRUPSIYAGA-QARSHI-KURASHISH, Xaitbayeva Shohida 083639, 3-amaliy. Ishlab chiqarishdagi tabiiy va su’niy yorug’likni hisoblash usullari., Mis-va-uning-qotishmalari.-Qiyin-eriydigan-mustaxkam-va-antifriksion-qotishmalar.-Metall-bo‘lmagan-konstruksion-materiallar., MT3 (2)

Umumiy sinflar va usullar
Ushbu bo'limda siz quyidagilarni bilib olasiz:

  • Umumiy usullarni yaratish bir xil vazifalarni bajaradigan turli argumentlar bo'yicha turlari.

  • Umumiy Stack yaratish uchun foydalanish mumkin bo'lgan sinf har qanday sinf obyektlarini saqlash yoki interfeys turi.

  • Qanday qilishni tushunish uchun umumiy usullarni ortiqcha yuklash umumiy bo'lmagan usullar bilan yoki boshqa umumiy usullar bilan tanishish.

  • Xom turlarini tushunish va erishishga qanday yordam beradilar orqaga qarab muvofiqlik.

  • Qachon joker belgilardan foydalanish uchun aniq turdagi ma'lumotlar parametr haqida emas, usul tanasida talab qilinadi.

21-bob Umumiy sinflar va usullar
21.1 Kirish
Siz 7 va 20-boblarda mavjud umumiy usullar va sinflardan foydalangansiz. Ushbu bobda,o'zingiz yozishni o'rganasiz. Shuningdek, siz generiklar va o'rtasidagi munosabatlarni o'rganasiz haddan tashqari yuklash va merosxo'rlik kabi boshqa java xususiyatlari.Elementlarni saralash uchun bitta tartiblash usulini yozsak yaxshi bo'lardi.Integer massivi, String massivi yoki tartiblashni qo'llab-quvvatlaydigan har qanday turdagi massiv (ya'ni, uning elementlarini solishtirish mumkin). Agar biz bitta Stack sinfini yozsak yaxshi bo'lardi butun sonlar to'plami, suzuvchi nuqtali raqamlar to'plami, satrlar to'plami sifatida foydalanish mumkin, yoki boshqa turdagi steklarda. Turlarning mos kelmasligini aniqlay olsak, yanada yaxshi bo'lardi. Kompilyatsiya vaqti - kompilyatsiya vaqti turi xavfsizligi sifatida tanilgan. Misol uchun, agar Stack faqat saqlasabutun sonlar, Stringni o'sha Stackga surishga urinish kompilyatsiya vaqtida xatolikka olib kelishi kerak. Ushbu bobda umumiy modellarni yaratish vositalarini ta'minlovchi generiklar muhokama qilinadi.yuqorida aytib o'tilgan. Umumiy usullar sizga bitta usul deklaratsiyasi bilan bog'liq usullar to'plamini belgilash imkonini beradi. Umumiy sinflar (va interfeyslar) bilan belgilash imkonini beradi.Shuningdek, generiklar kompilyatsiya vaqtida noto'g'ri turlarni ushlash imkonini beruvchi kompilyatsiya vaqti turi xavfsizligini ta'minlang. Biz ob'ektlar massivini saralashning umumiy usulini yozishimiz va keyin chaqirishimiz mumkin. saralash uchun Integer massivlari, Double massivlar, String massivlari va boshqalar bilan umumiy usul massiv elementlaridir. Kompilyator massiv o'tganligiga ishonch hosil qilish uchun turli tekshiruvni amalga oshirishi mumkin.Saralash usuli bir xil turdagi elementlarni o'z ichiga oladi. Biz bitta generic yozishimiz mumkin:

  1. Obyektlar to'plamini boshqaradigan stack klassi, so'ngra stek uchun Stack obyektlarini yarating.

  2. Butun sonlar, Doubles to'plami, satrlar to'plami va boshqalar. Kompilyator bajarishi mumkin edi.

  3. Stack bir xil turdagi elementlarni saqlashiga ishonch hosil qilish uchun turini tekshirish.

21.2 Umumiy usullar uchun motivatsiya:
Haddan tashqari yuklangan usullar ko'pincha har xil turdagi o'xshash operatsiyalarni bajarish uchun ishlatiladi. ma'lumotlar. Umumiy usullarni rag'batlantirish uchun keling, o'z ichiga olgan misol (21.1-rasm) bilan boshlaylik. Stringni chop etuvchi haddan tashqari yuklangan printArray usullari (21–28, 31–38 va 41–48 qatorlar) Integer massivi, Double massivi va Belgilar massivi elementlarining tasvirlari, mos ravishda, int, double va char ibtidoiy tipdagi massivlardan foydalanishimiz mumkin edi.
21.1 Kirish
21.2 Umumiy usullar uchun motivatsiya
21.3 Umumiy usullar: Amalga oshirish
va Compile-time Translation
21.4 Qo'shimcha kompilyatsiya vaqti tarjimasi
Muammolar: Turni ishlatadigan usullar
Qaytish turi sifatida parametr
21.5 Umumiy usullarni ortiqcha yuklash
21.6 Umumiy sinflar
21.7 Xom turlari
21.8 Qabul qilinadigan usullardagi joker belgilari
Parametrlar turi
21.9 Generiklar va meros: Eslatmalar
21.10 Yakunlash.
Xulosa. | O'z-o'zini tekshirish mashqlari | O'z-o'zini tekshirish mashqlariga javoblar | Mashqlar
Dasturiy ta'minot muhandisligi kuzatuvi 21.1
Umumiy usullar va sinflar Java-ning dasturiy ta'minotni qayta ishlatish uchun eng kuchli imkoniyatlaridan biridir
kompilyatsiya vaqti turi xavfsizligi bilan.
21.2 Umumiy usullar uchun motivatsiya 875
bizning umumiy usul misolimizni o'rnatish uchun type-wrapper sinflarining massivlaridan foydalanish, chunki faqat
mos yozuvlar turlari umumiy usullar va sinflar bilan ishlatilishi mumkin.
1 // 21.1-rasm: OverloadedMethods.java
2 // Ortiqcha yuklangan usullar yordamida massiv elementlarini chop etish.
3 Ommaviy sinf OverloadedMethods
4 {
5 umumiy statik bekor asosiy (String [] args)
6 {
7 // Integer, Double va Character massivlarini yarating
8 Integer [] integerArray = {1, 2, 3, 4, 5, 6};
9 Double [] doubleArray = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7};
10 Belgi [] characterArray = {'H', 'E', 'L', 'L', 'O’};
11
12 System.out.println("IntegerArray massivida:");
13 printArray( integerArray ) ;// pass an integer array
14 System.out.println("\nDoubleArray massivida:");
15 print Array (doubleArray); pass a Double array
16 System.out.println("\nMassiv characterArray tarkibida:");
17 printArray( characterArray ); pass a Character array
18} // asosiyni tugatish
19
20 // Integer massivini chop etish uchun printArray usuli
21 public static void printArray(Integer[] inputArray )
22 {
23 // massiv elementlarini ko'rsatish
24 uchun (Integer element: inputArray)
25 System.out.printf("%s", element);
26
27 System.out.println();
28} // end usuli printArray
29
30 // Chop etish uchun printArray usuli Double massiv
31 public static void printArray(Double[] inputArray)
32 {
33 // massiv elementlarini ko'rsatish
34 uchun (Ikki element: inputArray)
36
37 System.out.println();
} // end usuli printArray
39
40 // Belgilar massivini chop etish uchun printArray usuli
41 public static void printArray( Character[] inputArray
42 {
43 // massiv elementlarini ko'rsatish
44 uchun (Belgi elementi: inputArray)
45 System.out.printf("%s", element);
46
47 System.out.println();
48} // end usuli printArray
49} // oxirgi sinf OverloadedMethods
21.1-rasm | Ortiqcha yuklangan usullar yordamida massiv elementlarini chop etish. (2-qismning 1-qismi.)
printArray (integerArray); // Integer massivini o'tkazing
printArray(doubleArray ); // Double massivni o'tkazing
printArray(characterArray); // Belgilar massivini o'tkazish
umumiy statik void printArray(Integer[] inputArray )
umumiy statik void printArray (Double [] inputArray)
umumiy statik void printArray(Character [] inputArray )
21-bob Umumiy sinflar va usullar.
Dastur uchta massivni e'lon qilish va ishga tushirish bilan boshlanadi - olti elementli Integer massiv integerArray (8-qator), etti elementli Double array doubleArray (9-qator) va besh elementli Belgilar massivi characterArray (10-qator). Keyin 12-17 qatorlar har bir massivning mazmunini ko'rsatadi. Kompilyator usul chaqiruviga duch kelganda, u qo'ng'iroqdagi argument turlariga mos keladigan bir xil nom va parametrlarga ega usul deklaratsiyasini topishga harakat qiladi. Bunda masalan, har bir printArray chaqiruvi printArray usuli deklaratsiyasidan biriga mos keladi. Uchun masalan, 13-qator argument sifatida printArray-ni integerArray bilan chaqiradi. Kompilyator argument turini aniqlaydi (ya'ni,Integer[]) va printArrayni topishga harakat qiladi.Integer[] parametrini belgilaydigan usul (21–28-qatorlar), so‘ngra unga qo‘ng‘iroqni o‘rnatadi. Xuddi shunday, kompilyator 15-qatorda qo'ng'iroqqa duch kelganida, u aniqlaydi. Argument turini (masalan,Double[]), keyin Double[] parametrini (31–38-qatorlar) belgilaydigan printArray usulini topishga harakat qiladi, so‘ngra ushbu usulga qo‘ng‘iroqni o‘rnatadi. Nihoyat, kompilyator 17-qatorda qo'ng'iroqqa duch keladi, u argument turini aniqlaydi (ya'niCharacter[]), so'ngra Character[] ni belgilaydigan printArray usulini topishga harakat qiladi. Parametr (41–48-qatorlar), keyin ushbu usulga qo'ng'iroqni o'rnatadi. Har bir printArray usulini o'rganing. Massiv elementi turi har bir usulda ko'rinadi. Sarlavha (21, 31 va 41-satrlar) va for-statement sarlavhasi (24, 34 va 44-qatorlar). Agar biz har bir usuldagi element turlarini umumiy nom bilan almashtiring - konventsiya bo'yicha – keyin bo’lsak,
uch usul ham 21.2-rasmdagiga o'xshaydi. Ko'rinib turibdiki, agar biz uni almashtira olsak massiv elementi turi uchta usulning har birida bitta umumiy turga ega bo'lsa, bizning String tasvirlarini aks ettira oladigan bitta printArray usulini e'lon qila olish ob'ektlarni o'z ichiga olgan har qanday massivning elementlari. 21.2-rasmdagi usul shunga o'xshash umumiy printArray usuli deklaratsiyasini biz 21.3-bo'limda muhokama qilamiz. IntegerArray massivi quyidagilarni o'z ichiga oladi:
1 2 3 4 5 6
DoubleArray massivi quyidagilarni o'z ichiga oladi:
1,1 2,2 3,3 4,4 5,5 6,6 7,7
characterArray massivi quyidagilarni o'z ichiga oladi:
SALOM
1 ommaviy statik bekor printArray([] inputArray )
2 {
3 // massiv elementlarini ko'rsatish
4 uchun (element: inputArray)
5 System.out.printf("%s", element);
6
7 System.out.println();
8} // end usuli printArray
21.2-rasm | printArray usuli, bunda haqiqiy tur nomlari konventsiya bilan almashtiriladi umumiy ism T.
21.1-rasm | Ortiqcha yuklangan usullar yordamida massiv elementlarini chop etish. (2-qismning 2-qismi.)
21.3 Umumiy usullar: Amalga oshirish va kompilyatsiya vaqti tarjimasi 877
21.3 Umumiy usullar: Amalga oshirish va CompileTime tarjimasi:
Agar bir nechta ortiqcha yuklangan usullar bilan bajarilgan operatsiyalar har bir argument uchun bir xil bo'lsa turi, haddan tashqari yuklangan usullar a yordamida ixchamroq va qulayroq kodlanishi mumkin. Umumiy usul: Siz chaqirish mumkin bo'lgan yagona umumiy usul deklaratsiyasini yozishingiz mumkin. Har xil turdagi argumentlar,umumiy argumentlarga o'tgan argumentlar turlari asosidagi usuli bo'lsa, kompilyator har bir usul chaqiruvini mos ravishda boshqaradi.
21.3-rasmda umumiy printArray yordamida 21.1-rasm qo'llanilishi ko'rsatilgan.
usuli (22–29-qatorlar). 14, 16 va 18-qatorlardagi printArray usuli chaqiruvlari bir xil
21.1-rasmdagilarga (14, 16 va 18-qatorlar) va ikkita dasturning natijalari bir xil. Bu generiklarning ifodali kuchini keskin ko'rsatadi.
1 // 21.3-rasm: GenericMethodTest.java
2 // PrintArray umumiy usuli yordamida massiv elementlarini chop etish. 34
umumiy sinf GenericMethodTest
5 {
6 umumiy statik bekor asosiy (String [] args)
7 {
8 // Integer, Double va Character massivlarini yarating
9 Integer [] intArray = {1, 2, 3, 4, 5};
10 Double [] doubleArray = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7};
11 Belgi [] charArray = {'H', 'E', 'L', 'L', 'O'};
12
13 System.out.println("IntegerArray massivida:");
14 printArray (intejerArray); // pass an Integer array
15 System.out.println("\nDoubleArray massivi tarkibida:");
16 printArray(doubleArray); // pass aDouble array
17 System.out.println("\nMassiv characterArray tarkibida:");
18 printArray (characterArray); pass a Character array
19} // asosiyni tugatish
20
21 // generic metod printArray
22 public static void printArray (T [] inputArray)
23 {
24 // display array elements
25 for (T element: inputArray)
26 System.out.printf(“%s”, element )
27
28 System.out.println();
29} // end usuli printArray
30} // yakuniy sinf GenericMethodTest
IntegerArray massivi quyidagilarni o'z ichiga oladi:
1 2 3 4 5 6
DoubleArray massivi quyidagilarni o'z ichiga oladi:
1,1 2,2 3,3 4,4 5,5 6,6 7,7
characterArray massivi quyidagilarni o'z ichiga oladi:
SALOM
21.3-rasm | PrintArray umumiy usuli yordamida massiv elementlarini chop etish.
printArray (integerArray); // Integer massivini o'tkazing
printArray (doubleArray); // Double massivni o'tkazing
printArray (characterArray); // Belgilar massivini o'tkazish
// printArray umumiy usuli
umumiy statik < T > void printArray( T[] inputArray )

// massiv elementlarini ko'rsatish


uchun (T elementi: inputArray)
System.out.printf("%s", element);
21-bob Umumiy sinflar va usullar.
22-qator printArray deklaratsiyasi usulini boshlaydi. Barcha umumiy usul deklaratsiyasidan oldingi burchakli qavslar (< va >) bilan ajratilgan turdagi parametr bo'limiga ega bo'ling. Usulning qaytish turi (bu misolda< T >). Har bir tip-parametr bo'limida bitta yoki ikkita turi mavjud. Ko'proq turdagi parametrlar (rasmiy turdagi parametrlar deb ham ataladi), vergul bilan ajratiladi. Bir parametr, shuningdek, turdagi o'zgaruvchi sifatida ham tanilgan, umumiy tip nomini belgilaydigan identifikatordir. Tur parametrlari umumiy usul deklaratsiyasida qaytarish turini, parametr turlarini va mahalliy o'zgaruvchilar turlarini e'lon qilish uchun ishlatilishi mumkin va ular turlari uchun to'ldiruvchi vazifasini bajaradi. Argumentlar umumiy usulga o'tkaziladi, ular haqiqiy turdagi argumentlar sifatida tanilgan. Umumiy usulning tanasi, boshqa har qanday usul kabi e'lon qilinadi. A tur parametrlari ibtidoiy turlarni emas (masalan, int, double va char) faqat mos yozuvlar turlarini ifodalashi mumkin. Bunga ham e'tibor bering metod deklaratsiyasidagi tip-parametr nomlari tip-parametr bo’limida e'lon qilinganlarga mos kelishi kerak. Masalan, 25-satr elementni T turi sifatida e'lon qiladi, bu esa 22-satrda e'lon qilingan turdagi parametrga (T) mos keladi. Shuningdek, turdagi parametr e'lon qilinishi mumkin. Parametrlar ro'yxati: Masalan, T tipi-parametr nomi quyida ikki marta uchraydi. Usul parametrlari ro'yxati: Tur parametrlari nomlari turli umumiy usullar orasida yagona bo'lishi shart emas. PrintArray usulining tip-parametr bo'limi T tip parametrini printArray chiqaradigan massiv elementi turi uchun joy ushlagichi sifatida e'lon qiladi va parametrda T paydo bo'ladi. Massiv elementi turi sifatida ro'yxat (22-qator). For-bayon sarlavhasi (25-satr) T sifatida ham foydalanadigan element turi. Bu printArray haddan tashqari yuklangan ikkita joy 21.1-rasmdagi usullar massiv elementi turi sifatida Integer, Double yoki Character ko'rsatilgan. PrintArray ning qolgan qismi 21.1-rasmda keltirilgan versiyalar bilan bir xil. b21.1-rasmdagidek, dastur olti elementli Integerni e'lon qilish va ishga tushirishdan boshlanadi. Massiv integerArray (9-qator), yetti elementli Double array doubleArray (10-qator) va besh elementli Belgilar massivi characterArray (11-qator). Keyin dastur har bir massivni chiqaradi. PrintArray ni chaqirish orqali (14, 16 va 18-qatorlar) - bir marta integerArray argumenti bilan, bir marta doubleArray argumenti va bir marta characterArray argumenti bilan. Kompilyator 14-qatorga duch kelganida, u birinchi navbatda integerArray argumentini aniqlaydi. Yozing (ya'ni, Integer []) va printArray nomli usulni aniqlashga harakat qiladi. Keyingi, kompilyator singlni belgilaydigan printArray nomli umumiy usul mavjudligini aniqlaydi. Massiv parametri va massiv elementi turini ifodalash uchun tip parametridan foydalanadi. Kompilyator printArray (22–29-qatorlar) mos kelishini aniqlaydi va usulga qo'ng'iroqni o'rnatadi. Xuddi shu jarayon 16 va 18-qatorlarda printArray usuliga qo'ng'iroqlar uchun takrorlanadi. Umumiy statik < T > void printTwoArrays (T [] array1, T [] array2)
Umumiy dasturlash xatosi 21.1
Umumiy usulni e'lon qilishda, usulning qaytish turidan oldin tip-parametr bo'limini joylashtirmaslik sintaksis xatosidir - kompilyator usulda uchraganida tip parametrlari nomlarini tushunmaydi.
Yaxshi dasturlash amaliyoti 21.1
Tur parametrlarini alohida bosh harflar sifatida ko'rsatish tavsiya etiladi. Odatda, massiv elementining turini (yoki boshqa to'plamni) ifodalovchi tip parametri T deb nomlanadi.
21.3 Umumiy usullar: Tarjimani amalga oshirish va kompilyatsiya qilish vaqti. Usul chaqiruvlarini o'rnatishdan tashqari, kompilyator ham usul tanasidagi operatsiyalar massivda saqlangan turdagi elementlarga qo'llanilishi mumkin.
Ushbu misoldagi massiv elementlarida bajariladigan yagona operatsiya va ularning String tasvirini chiqarish. 26-qator har birida yashirin toString chaqiruvini amalga oshiradi. Jeneriklar bilan ishlash uchun massivning har bir elementi sinf yoki interfeys tipidagi obyekt bo'lishi kerak. Barcha ob'ektlar toString usuliga ega bo'lganligi sababli, kompilyator 26-qatorni qondiradi va printArray massivi argumentidagi har qanday ob'ekt uchun haqiqiy amalni bajaradi. Integer, Double va Character sinflarining usullari String tasvirini qaytaradi.
Kompilyatsiya vaqtida o'chirish:
Kompilyator printArray umumiy usulini Java bayt kodlariga tarjima qilganda, u olib tashlaydi tip-parametr bo'limi va tur parametrlarini haqiqiy turlar bilan almashtiradi. Bu jarayon yo'q qilish deb nomlanadi. Odatiy bo'lib, barcha umumiy turlar Obyekt turi bilan almashtiriladi. Shunday qilib, printArray usulining kompilyatsiya qilingan versiyasi 21.4-rasmda ko'rsatilganidek paydo bo'ladi - faqat bitta nusxa mavjud misoldagi barcha printArray chaqiruvlari uchun ishlatiladigan ushbu kodning. Bu butunlay boshqacha C++ shablonlari kabi boshqa shunga o'xshash mexanizmlardan, unda alohida nusxasi mavjud manba kodi usulga argument sifatida berilgan har bir tur uchun yaratiladi va kompilyatsiya qilinadi.
21.4-bo'limda ko'rib turganingizdek, generiklarning tarjimasi va kompilyatsiyasi biz ushbu bo'limda muhokama qilgan narsalarga qaraganda bir oz ko'proq ishtirok etadi.
21.3-rasmda printArray ni umumiy usul sifatida e’lon qilib, biz zaruratni bartaraf etdik.
21.1-rasmdagi haddan tashqari yuklangan usullar, 19 qator kodni saqlash va qayta foydalanish mumkin bo'lgan kodni yaratish
obyektlarni o'z ichiga olgan har qanday massivdagi elementlarning String tasvirlarini chiqarishi mumkin bo'lgan usul. Biroq, bu maxsus misol oddiygina printArray ni e'lon qilishi mumkin edi.
21.4-rasmda ko'rsatilganidek usul, parametr sifatida Ob'ekt massividan foydalangan holda. Bu bo'lardi bir xil natijalarni berdi, chunki har qanday Obyektni String sifatida chiqarish mumkin. Umumiy holda usul, foyda, usul shuningdek, turi parametridan foydalanganda ayon bo'ladi, keyingi bo'limda ko'rsatganimizdek, usulning qaytish turi.
Umumiy dasturlash xatosi 21.2
Agar kompilyator usul chaqiruvini umumiy bo'lmagan yoki umumiy usul deklaratsiyasiga moslashtira olmasa, kompilyatsiya xatosi yuzaga keladi.
Umumiy dasturlash xatosi 21.3
Agar kompilyator usul chaqiruviga to'liq mos keladigan usul deklaratsiyasini topmasa, lekin usul chaqiruvini qondira oladigan ikki yoki undan ortiq usullarni topsa, kompilyatsiya xatosi yuzaga keladi.
1 ommaviy statik bekor printArray(Objekct[] inputArray )
2 {
3 // massiv elementlarini ko'rsatish
4 uchun (element: inputArray)
5 System.out.printf("%s", element);
6
7 System.out.println();
8} // end usuli printArray
21.4-rasm | O'chirishdan keyin printArray umumiy usuli kompilyator tomonidan amalga oshiriladi.
21-bob. Umumiy sinflar va usullar
21.4 Kompilyatsiya vaqtidagi qo'shimcha tarjima muammolari: Qaytish turi sifatida tur parametridan foydalanadigan usullar.
Qaytishda turli turdagi parametrlar qo'llaniladigan umumiy usul misolini ko'rib chiqaylik yozing va parametrlar ro'yxatida (21.5-rasm). Ilova maksimal umumiy usuldan foydalanadi bir xil turdagi uchta argumentdan eng kattasini aniqlash va qaytarish. Afsuski, relyatsion operator > mos yozuvlar turlari bilan ishlatilmaydi. Shu bilan birga, agar ushbu sinf Comparable (java.lang paketi) umumiy interfeysini amalga oshirsa, bir sinfning ikkita ob'ektini solishtirish mumkin. Ibtidoiy turlar uchun barcha turdagi o'rash sinflari amalga oshiriladi. Umumiy sinflar singari, umumiy interfeyslar ham bitta bilan belgilash imkonini beradigan interfeys deklaratsiyasi, tegishli turlar to'plami. Comparable ob'ektlari solishtirmaga ega usuli. Misol uchun, agar bizda ikkita Integer ob'ekti bo'lsa, integer1 va integer2, ular mumkin ifoda bilan solishtiriladi:
Comparable ni amalga oshiradigan sinfni o'sha sinfning ikkita ob'ekti mazmunini solishtirish va taqqoslash natijalarini qaytarish uchun solishtirish usulini e'lon qilish uchun sizning javobgarligingiz. Comparable interfeysi hujjatlarida ko'rsatilganidek, compareTo kerak agar ob'ektlar teng bo'lsa, 0 ni, agar ob'ekt1 ob'ekt2 dan kichik bo'lsa, manfiy butun sonni yoki ob'ekt1 ob'ekt2 dan katta bo'lsa, musbat butun sonni qaytaring. Masalan, Integer klassi solishtirish usuli ikkita Integer obyektida saqlangan int qiymatlarini solishtiradi. Amalga oshirishning foydasi Comparable interfeysi - Comparable ob'ektlarini saralash va bilan ishlatish mumkin. To'plamlar sinfini qidirish usullari (java.util paketi). Biz bu usullarni 20-bobda muhokama qildik. Bu misolda maksimal to usulida solishtirish usulidan foydalanamiz.
integer1.compareTo(integer2)
1 // 21.5-rasm: MaximumTest.java
2 // Umumiy usul maksimal uchta obyektning eng kattasini qaytaradi.
3
4 ommaviy sinf MaximumTest
5 {
6 umumiy statikni bekor qilish (String [] args)
7 {
8 System.out.printf("Maksimal %d, %d va %d - %d\n\n", 3, 4, 5, 9);
10 System.out.printf("Maksimal %.1f, %.1f va %.1f - %.1f\n\n",
11 6.6, 8.8, 7.7,);
12 System.out.printf("%s, %s va %s ning maksimal soni %s\n", "nok",
13 "olma", "apelsin",);
14} // asosiyni tugatish
15
16 // determinas the largest of three Comparable objects
17 public static >T maximum( T x, Ty, Tz )
18{
19 T max=x; // assume x is initially the largest
20
21 if (y.compareTo (max)>0 )
22 max=y; // y is the largest so far
21.5-rasm | Umumiy usul maksimal, uning turi parametrining yuqori chegarasi. (2-qismning 1-qismi.)
maksimal (3, 4, 5)
maksimal (6,6, 8,8, 7,7)
maksimal ("nok", "olma", "apelsin")
// uchta taqqoslanadigan ob'ektning eng kattasini aniqlaydi
umumiy statik < T kengaytiriladi solishtiriladigan< T > > T maksimal (T x, T y, T z)
{
T max = x; // faraz qilaylik, x dastlab eng katta
agar (y.qiyoslash( maks ) > 0 )
max = y; // y hozirgacha eng kattasi
21.4 Tur parametrini turini qaytarish sifatida ishlatadigan usullar.
Maksimal umumiy usul
Maxsimal umumiy usul (17–28-qatorlar) qaytish turi sifatida T turi parametridan foydalanadi. Maxsimal usul (17-satr), usul parametrlari x, y va z (17-qator) va turi sifatida mahalliy o'zgaruvchining max (19-qator). Type-parameter bo'limi T ning Comparable-ni kengaytirishini bildiradi — faqat Comparable interfeysini amalga oshiradigan sinflar obyektlaridan foydalanish mumkin bu usul bilan. Bunday holda, Comparable turi parametrning yuqori chegarasi sifatida tanilgan. Odatiy bo'lib, Ob'ekt yuqori chegara hisoblanadi. Bog'langan turdagi parametr deklaratsiyasi parametr turi parametri sinfni kengaytiradimi yoki interfeysni amalga oshiradimi, har doim kengaytirilgan kalit so'zni ishlatadi. Ushbu turdagi parametrdan ko'ra ko'proq cheklangan.
21.3-rasmda printArray uchun belgilangan, u har qanday tarkibni o'z ichiga olgan massivlarni chiqarishga qodir edi. ob'ekt turi. Comparable obyektlaridan foydalanishni cheklash muhim, chunki bunday emas barcha ob'ektlarni solishtirish mumkin. Shu bilan birga, Comparable obyektlari a bo'lishi kafolatlanadi Maksimal usul aniqlash uchun biz 6.4-bo'limda ishlatgan algoritmdan foydalanadi uchta argumentning eng kattasi. Usul uning birinchi argumenti (x) ni nazarda tutadi. Keyinchalik, 21-22 qatorlardagi if ifodasi y ning max dan katta ekanligini aniqlaydi. Shart y ning compareTo usulini chaqiradi. y.compareTo(max) ifodasi bilan manfiy butun son, 0 yoki musbat qaytaradi butun son, y ning maksga bo'lgan munosabatini aniqlash uchun. Agar compareTo ning qaytish qiymati kattaroq bo'lsa 0 dan katta bo'lsa, y kattaroq va max o'zgaruvchisiga tayinlanadi. Xuddi shunday, satrlardagi if ifodasi 24–25 z ning maks.dan katta ekanligini aniqlaydi. Agar shunday bo'lsa, 25-qator z ni max ga belgilaydi. Keyin chiziq 27 qo'ng'iroq qiluvchiga maksimal qaytaradi. Asosiy (6–14-qatorlar) 9-qatorda 3, 4 va 5 butun sonlar bilan maksimal chaqiriladi. Kompilyator qachon ushbu chaqiruvga duch kelganda, u birinchi navbatda uchta turdagi argumentni oladigan maksimal usulni qidiradi. int Bunday usul yo'q, shuning uchun kompilyator foydalanish mumkin bo'lgan umumiy usulni qidiradi va maksimal umumiy usulni topadi. Biroq, esda tutingki, umumiy usulga argumentlar mos yozuvlar turi bo'lishi kerak. Shunday qilib, kompilyator uchta int qiymatini Integer sifatida avtomatik qutiga qo'yadi. Obyektlar va uchta Integer obyekti maksimal darajaga o'tkazilishini bildiradi. Class Integer (java.lang paketi) Comparable interfeysini amalga oshiradi, shunday qilib compareTo usuli ikkita Integer obyektidagi int qiymatlarini solishtiradi. Shuning uchun butun sonlar maksimal usul uchun haqiqiy argumentlar. Maksimalni ifodalovchi butun son qayta tiklanganda
23
24 if (z. compareTo(max)>0)
25max=z; // z is the largest
26
27return max; // returns the largest object
28}
29} // oxirgi sinf MaximumTest
Maksimal 3, 4 va 5 - 5
Maksimal 6,6, 8,8 va 7,7 8,8 ni tashkil qiladi
Armut, olma va apelsinning maksimali nokdir.
21bob. Umumiy sinflar va usullar.
Umumiy sinflar va usullar burilsa, biz uni int ibtidoiy tipdagi qiymatni chiqaradigan %d format spetsifikatsiyasi bilan chiqarishga harakat qilamiz. Shunday qilib, maksimalning qaytish qiymati int qiymati sifatida chiqariladi. Shunga o'xshash jarayon 11-qatorda maksimal darajaga o'tkazilgan uchta qo'sh argument uchun sodir bo'ladi. Har bir dubl Double ob'ekt sifatida autoboxed qilinadi va maksimal darajaga o'tkaziladi. Shunga qaramay, bunga ruxsat beriladi chunki Double klassi (java.lang paketi) Comparable interfeysini amalga oshiradi. Maksimal qaytarilgan Double %.1f format aniqlagich bilan chiqariladi, u chiqadi ikkilamchi primitiv turdagi qiymat. Shunday qilib, maksimalning qaytish qiymati avtomatik ravishda ochiladi va a sifatida chiqariladi. 13-qatordagi maksimalga qo'ng'iroq uchta Stringni oladi, ular ham Comparable obyektlaridir. Biz ataylab eng katta qiymatni boshqa pozitsiyaga joylashtirdik har bir usul chaqiruvi (9, 11 va 13-qatorlar) umumiy usul har doim topilganligini ko'rsatish uchun. Kompilyator maksimal usulni bayt-kodlarga tarjima qilganda, u o'chirishdan foydalanadi. Bu turdagi parametrlarni haqiqiy turlarga almashtirish. 21.3-rasmda barcha umumiy turlar mavjud. Ob'ekt turi bilan almashtirildi. Aslida, barcha turdagi parametrlar deb ataladigan bilan almashtiriladi. Yuqori chegarani ko'rsatish uchun type parametri nomini kengaytirilgan va kalit so'zi bilan kuzatib boring yuqori chegarani ifodalovchi sinf yoki interfeys nomi yoki vergul bilan ajratilgan roʻyxati yuqori chegarani ifodalovchi turlar hisoblanadi. Ro'yxatda nol yoki bitta sinf va nol yoki undan ko'p bo'lishi mumkin. Masalan, maksimal usulning tip-parametr bo'limida (21.5-rasm) biz T tipi parametrining yuqori chegarasini Comparable turi sifatida quyidagicha belgilab oldik: Shunday qilib, faqat Comparable ob'ektlari argument sifatida maksimal darajaga o'tkazilishi mumkin - har qanday narsa solishtirish mumkin emas kompilyatsiya xatolariga olib keladi. Agar boshqacha belgilanmagan bo'lsa, Obyekt standart yuqori chegara hisoblanadi. 21.6-rasmda maksimal usulning o'chirilishi simulyatsiya qilingan tip-parametr bo'limi olib tashlanganidan keyin usulning manba kodini ko'rsatish orqali turlari va parametr T turi yuqori chegarasi bilan almashtiriladi, solishtirma, bo'ylab usul deklaratsiyasi bo’ladi. Comparable ning o'chirilishi shunchaki solishtirish mumkin. O'chirishdan so'ng, maksimal usul uning solishtiriladigan turini qaytarishini bildiradi. Biroq, qo'ng'iroq qilish usuli solishtirma qabul qilishni kutmaydi. U obyektni olishni kutadi va argument sifatida maksimalga uzatilgan bir xil turdagi - Integer, Double yoki String
T taqqoslanadigan< T > kengaytiriladi
1 umumiy statik maksimal (x, y, z)
2 {
3max = x; // faraz qilaylik, x dastlab eng katta
4
5 agar (y.qiyoslash( maks ) > 0 )
6max = y; // y hozirgacha eng kattasi
7
8 agar (z.compareTo( max ) > 0 )
9max = z; // z eng kattasi
10
11 Maksimal qaytish ; // eng katta obyektni qaytaradi
12} // tugatish usuli maksimal
21.6-rasm | O'chirishdan keyin maksimal umumiy usul kompilyator tomonidan amalga oshiriladi.
21.5 Umumiy usullarni haddan tashqari yuklash
Kompilyator tip-parametr ma'lumotlarini bilan almashtirganda taqqoslash mumkin. Usul deklaratsiyasida yuqori chegara turi, shuningdek, oldinga aniq cast operatsiyalarini kiritadi. Qaytarilgan qiymat qo'ng'iroq qiluvchi tomonidan kutilgan turdagi bo'lishini ta'minlash uchun har bir usul chaqiruvi. Shunday qilib, 9-qatorda (21.5-rasm) maksimalga qo'ng'iroq qilishdan oldin Integer cast bo'ladi, xuddi quyidagi kabi.
11-qatordagi maksimalga qo'ng'iroqdan oldin, quyidagi kabi Double cast bilan amalga oshiriladi va 13-qatordagi maksimalga qo'ng'iroqdan oldin, quyidagi kabi String cast bilan amalga oshiriladi. Har bir holatda, qaytariladigan qiymat uchun quyma turi ma'lum bir usul chaqiruvidagi usul argumentlarining turlaridan kelib chiqadi, chunki usul deklaratsiyasiga ko'ra, qaytish turi va argument turlari mos keladi. Mumkin bo'lgan ClassCast istisnolari Ushbu misolda siz Ob'ektlarni qabul qiladigan usuldan foydalana olmaysiz, chunki Object klassi faqat tenglikni taqqoslashni ta'minlaydi. Bundan tashqari, generiklarsiz siz cast operatsiyasini amalga oshirish uchun javobgar bo'lasiz. Jeneriklardan foydalanish kiritilgan gips hech qachon tashlanmasligini ta'minlaydi. ClassCastException, agar generiklar sizning kodingiz davomida qo'llaniladi (ya'ni, siz eski kodni yangi umumiy kod bilan aralashtirmang).
21.5 Umumiy usullarni ortiqcha yuklash
Umumiy usul haddan tashqari yuklangan bo'lishi mumkin. Sinf ikki yoki undan ortiq umumiy usullarni taqdim etishi mumkin. Bir xil usul nomini, lekin boshqa usul parametrlarini belgilang. Masalan, umumiy 21.3-rasmdagi printArray usuli boshqa printArray generic bilan ortiqcha yuklanishi mumkin. Kompilyatorni belgilash uchun lowSubscript va highSubscript qo'shimcha parametrlari bilan usul massivning chiqish qismi (21.5-mashqga qarang). Umumiy usulni umumiy bo'lmagan usullar bilan ham ortiqcha yuklash mumkin. Qachon kompilyator usul chaqiruviga duch kelsa, u eng aniq usul deklaratsiyasini qidiradi va qo'ng'iroqda ko'rsatilgan usul nomi va argument turlariga mos keladi. Masalan, 21.3-rasmdagi printArray umumiy usuli maxsus versiya bilan haddan tashqari yuklanishi mumkin. Kompilyator usul chaqiruviga duch kelganda, qaysi usulni chaqirish kerakligini aniqlash uchun mos keladigan jarayonni amalga oshiradi. Kompilyator aniq moslikni topishga va undan foydalanishga harakat qiladi. Usul nomi va usul chaqiruvining argument deklaratsiya turlari ma'lum bir usulnikiga mos keladi. Agar bunday usul bo'lmasa, kompilyator mos turlar yoki mos keladigan umumiy usul bilan usulni topishga harakat qiladi.
21.6 Umumiy sinflar
Stack kabi ma'lumotlar strukturasi tushunchasini mustaqil ravishda tushunish mumkin u boshqaradigan element turi. Umumiy sinflar tushunchasini tavsiflash uchun vositani taqdim etadi,stek (yoki boshqa har qanday sinf) turiga bog'liq bo'lmagan tarzda. Keyin biz umumiy sinfning o'ziga xos turlarini yaratishimiz mumkin. Bu qobiliyat ajoyib imkoniyat yaratadi dasturiy ta'minotni qayta ishlatish imkoniyatidir.
(Butun) maksimal (3, 4, 5)
(Ikki marta) maksimal (6,6, 8,8, 7,7)
(String) maksimal ("nok", "olma", "apelsin")
21-bob Umumiy sinflar va usullar
Umumiy sinfga ega bo'lganingizdan so'ng, uni ko'rsatish uchun oddiy, ixcham belgidan foydalanishingiz mumkin. Sinf turi parametrlar o‘rniga ishlatilishi kerak bo‘lgan turlar Kompilyatsiya vaqtida, kompilyator kodingiz turi xavfsizligini ta'minlaydi va tasvirlangan o'chirish usullaridan foydalanadi.
21.3–21.4 bo'limlarida mijoz kodingizni umumiy sinf bilan o'zaro ta'sir qilish imkonini beradi. Masalan, bitta umumiy Stack klassi ko'plab mantiqiy narsalarni yaratish uchun asos bo'lishi mumkin. Stack sinflari (masalan, “Stack of Double”, “Stack of Integer”, “Stack of characters”, “Stack” Xodimlar"). Bu sinflar parametrlashtirilgan sinflar yoki parametrlashtirilgan turlar deb nomlanadi, chunki ular bir yoki bir nechta turdagi parametrlarni qabul qiladi. Esda tutingki, bu turdagi parametrlar faqat mos yozuvlar turlari, ya'ni Stack umumiy sinfini ibtidoiy turlar bilan o'rnatib bo'lmaydi. Biroq, biz Java-ning o'ramidagi obyektlarni saqlaydigan Stackni yaratishimiz mumkin. Sinflar va Java-ga ibtidoiy qiymatlarni obyektlarga aylantirish uchun autoboxingdan foydalanishga ruxsat bering. Eslab qoling o’rash sinfining bir qismi Stackdanchiqariladi vaibtidoiy turdagi o’zgaruvchiga tayinlanadi. Avtobokslash ibtidoiy turdagi qiymat (masalan, int) stekga surilganda sodir bo'ladi. O’rash sinfidagi ob'ektlarni o'z ichiga oladi (masalan, Integer)ni.
Umumiy stack sinfini amalga oshirish
21.7-rasmda umumiy Stack klassi deklaratsiyasi keltirilgan.
Umumiy bo'lmagan, lekin sinf nomidan keyin tip-parametr bo'limi (5-qator) keladi. Bunda T tipi parametri Stack boshqaradigan element turini ifodalaydi. Umumiy usullarda bo'lgani kabi, umumiy sinfning tip-parametr bo'limida vergul bilan ajratilgan bir yoki bir nechta turdagi parametrlar bo'lishi mumkin. (Siz ikkita turdagi parametrlarga ega umumiy sinf yaratasiz
21.8-mashq.) Tip parametri T element turini ifodalash uchun Stack klassi deklaratsiyasida ishlatiladi. Ushbu misol Stackni ArrayList sifatida amalga oshiradi.
1 // 21.7-rasm: Stack.java
2 // Stack umumiy sinf deklaratsiyasi.
3 import java.util.ArrayList;
4
5 umumiy sinf Stack< T >
6 {
7 private ArrayList elements; // ArrayList stores stack elements
8
9 // argumentsiz konstruktor standart o'lchamdagi stek yaratadi
10 umumiy stack ()
11 {
12 bu (10); // standart stek hajmi
13} // end no-argument Stack konstruktori
14
15 // konstruktor belgilangan miqdordagi elementlardan iborat stekni yaratadi
16 ommaviy stek (ichki sig'im)
17 {
18 int initCapacity = sig'im> 0? sig'imi: 10; // tasdiqlang
19 Elementlar = yangi ArrayList< T >(initCapacity); // ArrayList yarating
20} // end bir argumentli Stack konstruktori
21
22 // elementni stekga suring
23 public void push (T pushValue)
24 {
21.7-rasm | Stack umumiy sinf deklaratsiyasi. (2-qismning 1-qismi.)
21.6 Umumiy sinflar
25
26} // tugatish usuli surish
27
28 // agar bo'sh bo'lmasa, yuqori elementni qaytaring; boshqa EmptyStackException ni tashlang
29 ommaviy T pop ()
30 {
31 if (elements.isEmpty() ) // agar stek bo'sh bo'lsa
32 yangi EmptyStackException ("Stack bo'sh, ochilib bo'lmaydi");
33
34 // Stackning yuqori elementini olib tashlang va qaytaring
35 qaytarish elements.remove( elements.size() - 1 );
36} // tugatish usuli pop
37} // oxirgi sinf Stack< T >
Class Stack o'zgaruvchi elementlarni ArrayList sifatida e'lon qiladi (7-qator). Ushbu ArrayList Stack elementlarini saqlaydi. Ma'lumki, ArrayList dinamik ravishda o'sishi mumkin. Stack sinfimiz obyektlari ham dinamik ravishda o'sishi mumkin. Stack sinfining argumentsiz konstruktori (10-13-qatorlar) bitta argumentli konstruktorni (16-20-qatorlar) yaratish uchun chaqiradi. Asosiy ArrayList 10 ta element sig'imiga ega bo'lgan stek. Bitta argumentli konstruktorni to'g'ridan-to'g'ri chaqirish ham mumkin, bu ko'rsatilgan bosh harf bilan Stack yaratish sig'imidir. 18-qator konstruktor argumentini tasdiqlaydi. 19-qator ArrayList ni yaratadi. Push usuli (23–26-qatorlar) surilgan elementni qo'shish uchun ArrayList qo'shish usulidan foydalanadi. ArrayList elementlarining oxirigacha. ArrayListdagi oxirgi element ni ifodalaydi. Pop usuli (29-36-qatorlar) birinchi dete pop qilishga urinish qilinyaptimi shuni aniqlaydigan bo'sh stackdagi element. Agar shunday bo'lsa, 32-qator EmptyStackException ni chiqaradi (e'lon qilingan 21.8-rasmda). Aks holda, 35-qator oxirgi elementni olib tashlash orqali Stackning yuqori elementini qaytaradi. EmptyStackException klassi (21.8-rasm) argumentsiz konstruktorni va bir argumentli konstruktordir. Argumentsiz konstruktor standart xato xabarini o'rnatadi, va bitta argumentli konstruktor maxsus xato xabarini o'rnatadi.

1 // 21.8-rasm: EmptyStackException.java


2 // EmptyStackException sinf deklaratsiyasi.
3 umumiy sinf EmptyStackException RuntimeException-ni kengaytiradi
4 {
5 // argumentsiz konstruktor
6 ommaviy EmptyStackException()
7 {
8 this ("Stack bo'sh");
9} // argumentsiz tugatish EmptyStackException konstruktori
10
11 // bitta argumentli konstruktor
12 ommaviy EmptyStackException (String xabari)
13 {
21.8-rasm | EmptyStackException sinf deklaratsiyasi. (2-qismning 1-qismi.)
21.7-rasm | Stack umumiy sinf deklaratsiyasi. (2-qismning 2-qismi.)
elements.add(pushValue ); // pushValue-ni Stack-ga joylashtiring
21-bob Umumiy sinflar va usullar
Umumiy usullarda bo'lgani kabi, umumiy sinf kompilyatsiya qilinganda, kompilyator sinf turi parametrlarida o'chirishni amalga oshiradi va ularni yuqori chegaralari bilan almashtiradi. Sinf uchun Stack (21.7-rasm), yuqori chegara belgilanmagan, shuning uchun standart yuqori chegara Obyekt hisoblanadi. Umumiy sinf turi parametrining doirasi butun sinfdir. Biroq, yozing parametrlarni sinfning statik o'zgaruvchilar deklaratsiyasida ishlatib bo'lmaydi. 21.7-rasmdagi umumiy stek sinfini sinovdan o'tkazish. Endi, Stack umumiy sinfidan foydalanadigan dasturni (21.9-rasm) ko'rib chiqamiz (21.7-rasm). 12–13 qatorlar Stack tipidagi o'zgaruvchilarni yaratadi va ishga tushiradi (“Stack of Double”)deb o'qiladi. va Stack (“Stack of Integer” deb talaffuz qilinadi). Turlari Double va Butun sonlar Stack tipidagi argumentlar sifatida tanilgan. Kompilyator ularni almashtirish uchun ishlatadi. Translyatsiya operatsiyalarini kiritishi uchun parametrlarni kiriting. Tez orada quyma operatsiyalarni batafsil muhokama qilamiz. 12–13 qatorlar sig'imi 5 bo'lgan doubleStack va 10 sig'imli integerStack (standart) ni yaratadi. Chiziqlar 16–17 va 20–21 qoʻngʻiroq usullari testPushDouble (25–36-qatorlar), testPopDouble (39–qatorlar) testPushInteger (62–73-qatorlar) va testPopInteger (76–96-qatorlar) mos ravishda. Ushbu misolda ikkita Stackni ko'rsating.
14 super(xabar);
15} // bitta argumentli EmptyStackException konstruktorini tugatish
16} // oxirgi sinf EmptyStackException
1 // 21.9-rasm: StackTest.java
2 // Stack umumiy sinf test dasturi.
3 umumiy sinf StackTest
5 {
6 ta umumiy statik bekor asosiy (String [] args)
7 {
8 ta double [] doubleElements = {1.1, 2.2, 3.3, 4.4, 5.5};
9 int [] integerElements = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
10
11
12
13
14
15 // doubleElements elementlarini doubleStack-ga suring
16 testPushDouble (doubleStack, doubleElements); 17 testPopDouble doubleStack // doubleStack-dan oching
18
19 // integerElements elementlarini integerStack-ga surish
20 testPushInteger(integerStack, integerElements );
21 testPopInteger(integerStack ); // integerStack dan ochiladi
22} // asosiyni tugatish
23
21.9-rasm | Stack umumiy sinf sinov dasturi. (3-qismning 1-qismi.)
21.8-rasm | EmptyStackException sinf deklaratsiyasi. (2-qismning 2-qismi.)
// Stack< Double > va Stack< Integer > yarating
Stack< Double > doubleStack = new Stack< Double > (5);
Stack< Integer > integerStack = new Stack< Integer >();
21.6 Umumiy sinflar 887
24 // juft stek bilan surish usulini sinab ko'ring
25 ta shaxsiy statik bekor testPushDouble(
26 Stack< Double > stack, double [] qiymatlari)
27 {
28 System.out.println("\nElementlarni doubleStack-ga surish");
29
30 // elementlarni Stackga suring
31 uchun (ikkita qiymat: qiymatlar)
32 {
33 System.out.printf("%.1f ", qiymat);
34 stac.push( value); // push onto doubleStack
35} // uchun tugatish
36} // testPushDouble tugatish usuli
37
38 // ikkita stek bilan pop usulini sinab ko'ring
39 shaxsiy statik bekor testPopDouble (Stack< Double > stack)
40 {
41 // stekdan ochilgan elementlar
42 urinib ko'ring
43 {
44 System.out.println("\nDoubleStackdan elementlarni ochish");
45 ikki barobar popValue; // stekdan olib tashlangan elementni saqlash
46
47 // Stackdan barcha elementlarni olib tashlang
48 vaqt (to'g'ri)
49 {
50 System.out.printf
51 ("%.1f ", popValue);
52} // tugash vaqti
53} // urinishni tugatish
54 catch (EmptyStackException emptyStackException)
55 {
56 System.err.println();
57 emptyStackException.printStackTrace();
58} // end catch EmptyStackException
59} // testPopDouble tugatish usuli
60
61 // butun sonlar to'plami bilan surish usulini sinab ko'ring
62 shaxsiy statik bekor testPushInteger(
63 Stack< Integer > stack, int [] qiymatlari)
64 {
65 System.out.println("\nElementlarni integerStack-ga surish");
66
67 // elementlarni Stackga surish
68 uchun (int qiymati: qiymatlar)
69 {
70 System.out.printf("%d", qiymat);
71 stack
72} // uchun tugatish
73} // tugatish usuli testPushInteger
74
21.9-rasm | Stack umumiy sinf sinov dasturi. (3 qismning 2-qismi.)
21-bob Umumiy sinflar va usullar testPushDouble va testPopDouble usullari testPushDouble usuli (25–36-qatorlar) juftlikni joylashtirish uchun push usulini (34-qator) chaqiradi. DoubleElements massividan doubleStack-ga 1.1, 2.2, 3.3, 4.4 va 5.5 qiymatlari. Avtobokslash 34-qatorda dastur ibtidoiy ikki tomonlama qiymatni bosishga harakat qilganda sodir bo'ladi. TestPopDouble usuli (39–59-qatorlar) barcha qiymatlarni stekdan olib tashlash uchun cheksiz while tsiklida (48–52-qatorlar) Stack usuli pop (50-qator) ni chaqiradi. Chiqishda eslatma qiymatlar haqiqatan ham oxirgi kelgan, birinchi chiquvchi tartibda paydo bo'ladi (belgilovchi xususiyat staklar).
75 // shaxsiy statik bekor testPopInteger (Stack< Integer > stack)
76 steckni bekor qilish
77 {
78 // stekdan ochilgan elementlar
79 urinib ko'ring
80 {
81 System.out.println("\nIntegerStack dan elementlarni ochish");
82 int popValue; // stekdan olib tashlangan elementni saqlash
83
84 // Stackdan barcha elementlarni olib tashlang
85 vaqt (to'g'ri)
86 {
87
88 System.out.printf("%d", popValue);
89} // tugash vaqti
90} // urinishni yakunlang
91 catch (EmptyStackException emptyStackException)
92 {
93 System.err.println();
94 emptyStackException.printStackTrace();
95} // end catch EmptyStackException
96} // testPopInteger tugatish usuli
97} // oxirgi sinf StackTest
IntegerStackga elementlarni surish
1 2 3 4 5 6 7 8 9 10
integerStack dan elementlarni ochish
10 9 8 7 6 5 4 3 2 1
EmptyStackException: Stack bo'sh, ochilib bo'lmaydi
Stack.pop da (Stack.java:32)
StackTest.testPopInteger da (StackTest.java:87)
StackTest.main da (StackTest.java: 21)
21.9-rasm | Stack umumiy sinf sinov dasturi. (3 qismning 3-qismi.) popValue = stack.pop(); // intStack-dan oching
21.6 Umumiy sinflar
EmptyStackException ni chiqaradi, bu dasturning catch blokiga o'tishiga olib keladi (54-58-qatorlar) istisnoni hal qilish uchun. Stack izi istisnoni sodir bo'ldi va Stack usuli pop faylning 32-qatorida istisno hosil qilganligini ko'rsatadi. Track, shuningdek, pop usuli StackTest tomonidan chaqirilganligini ko'rsatadi. StackTest.java ning 50-qatoridagi testPopDouble usuli va bu usul testPopDouble StackTest.java ning 17-qatoridagi main usulidan chaqirish imkonini beradi. Istisno bo'lgan paytda usul chaqiruvi stekida bo'lgan usullarni aniqlash sodir bo'ldi. Dastur istisnoni ushlaganligi sababli, istisno mavjud deb hisoblanadi qayta ishlandi va dastur ishlashni davom ettirishi mumkin. Avtomatik ochish 50-qatorda dastur ochilgan Double ob'ektini tayinlaganda sodir bo'ladi. 21.4-bo'limdan eslaylikki, kompilyator to'g'ri turlarning umumiy usullardan qaytarilishini ta'minlash uchun qo'shimchalar kiritadi. O'chirishdan so'ng, Stack usuli pop ob'ekt turini qaytaradi, ammo testPopDouble'dagi mijoz kodi kutadi. Shunday qilib, kompilyator quyidagi kabi Double castni qo'shadi. PopValue ga tayinlangan qiymat pop tomonidan qaytarilgan Double ob'ektidan chiqariladi. TestPushInteger va testPopInteger usullari testPushInteger usuli (62–73-qatorlar) qiymatlarni joylashtirish uchun Stack usuli push-ni chaqiradi. TestPopInteger usuli (76–96-qatorlar) integerStack-dan qiymatlarni olib tashlash uchun Stack usuli pop-ni chaqiradi. Yana bir bor, qiymatlar oxirgi, birinchi chiqish tartibida ochiladi. O'chirish vaqtida kompilyator mijoz kodini usulda ekanligini tan oladi. TestPopInteger usuli pop qaytarilganda int olishni kutadi. Shunday qilib, kompilyator Integer castni qo'shadi, xuddi shunday popValue ga tayinlangan qiymat pop tomonidan qaytarilgan Integer obyektidan qutidan chiqariladi.
Sinf stekini sinash uchun umumiy usullarni yaratish
testPushDouble va testPushInteger usullaridagi kod qiymatlarni Stack yoki Stack ga surish uchun deyarli bir xil, mos ravishda va testPopDouble va testPopInteger usullaridagi kod qiymatlarni ochish uchun deyarli bir xil. Mos ravishda stack yoki Stack. 21.10-rasmda 21.9-rasmdagi testPushDouble va testPushInteger bilan bir xil vazifalarni bajarish uchun testPush umumiy usuli (24–35-qatorlar) e'lon qilingan, ya'ni qiymatlarni Stack ga kiriting. Xuddi shunday, testPop umumiy usuli (38–58-qatorlar) ni bajaradi. 21.9-rasmdagi testPopDouble va testPopInteger bilan bir xil vazifalar, ya'ni pop qiymatlari a
Stack. 21.10-rasmning chiqishi 21.9-rasmdagiga to'liq mos keladi.
popValue = (Double) stack.pop ();
popValue = (Integer) stack.pop ();
890 21-bob Umumiy sinflar va usullar
21.10-rasm | Umumiy Stack ob'ektlarini umumiy usullarga o'tkazish. (3 qismning 2-qismi.)
1 Ikki marta
2 Butun son
3 // doubleElements elementlarini doubleStack-ga surish
4 testPush("doubleStack", doubleStack, doubleElements); testPop ("doubleStack", 5 doubleStack); // doubleStack-dan oching
6 // integerElements elementlarini integerStack-ga surish
7 testPush("integerStack", integerStack, integerElements);
8 testPop ("integerStack", integerStack); // integerStack dan ochiladi
9 umumiy statik < T > void testPush (String nomi, Stack< T > stek,
10 T [] elementlar)
11 T elementi: elementlar
12 umumiy statik < T > void testPop (String nomi, Stack< T > stek)
13 T popValue; // stekdan olib tashlangan elementni saqlash
21.7 Xom turlari 11–12 qatorlar mos ravishda Stack va Stack obyektlarini yaratadi. 15–16 va 19–20 qatorlar Stackni sinash uchun testPush va testPop umumiy usullarini chaqiradi. Chunki tip parametrlari massivlarni o'tkazish imkoniyatiga ega bo'lish uchun faqat mos yozuvlar turlarini ifodalashi mumkin. DoubleElements va integerElements testPush umumiy usuliga, massivlarda e'lon qilingan 7-8 qatorlar Double va Integer o'rash turlari bilan e'lon qilinishi kerak. Qachon bu massivlar ibtidoiy qiymatlar bilan ishga tushiriladi, kompilyator har bir primitiv qiymatni avtomatik qutilarga joylashtiradi. Umumiy testPush usuli (24–35-qatorlar) T tipi parametridan foydalanadi (24-satrda ko'rsatilgan). Stack da saqlangan ma'lumotlar turini ifodalash uchun. Umumiy usul uchta argumentni oladi - chiqish maqsadlari uchun Stack ob'ektining nomini ifodalovchi String, a Stack tipidagi ob'ektga va T tipidagi massivga havola - elementlarning turi Stack ga suriladi. Kompilyator turi o'rtasidagi muvofiqlikni ta'minlaydi. Stack va surish chaqirilganda Stackga suriladigan elementlar umumiy usul chaqiruvining haqiqiy qiymati. TestPop umumiy usuli (38–58-qatorlar) oladi. Ikkita argument — chiqish maqsadlari uchun Stack obyekti nomini va Stack tipidagi obyektga havolani ifodalovchi String.
21.6-bo'limdagi Stack umumiy sinfi uchun sinov dasturlari Double va Integer argumentlari bilan Stacks-ni yaratadi. Bundan tashqari, umumiy sinf Stackni yaratish mumkin. Argument turini quyidagicha belgilash: Bu holda, objectStack xom turiga ega deyiladi, ya'ni kompilyator har bir turdagi argument uchun umumiy sinf davomida ob'ekt turini bilvosita ishlatadi. Shunday qilib oldingi bayonot har qanday turdagi ob'ektlarni saqlashi mumkin bo'lgan Stackni yaratadi. Bu Java-ning oldingi versiyalari bilan orqaga qarab muvofiqligi uchun. Masalan, ma'lumotlar tuzilmalari Java Collections Framework (20-bobga qarang) ob'ektlarga barcha saqlangan havolalar, lekin ular endi umumiy turlar sifatida amalga oshirilmoqda.
21.10-rasm | Umumiy Stack obyektlarini umumiy usullarga o'tkazish.
21-bob Umumiy sinflar va usullar: 1 // 21.11-rasm: RawTypeTest.java
19 testPush ("rawTypeStack1", rawTypeStack1, doubleElements);
20 testPop ("rawTypeStack1", rawTypeStack1);
21 testPush ("rawTypeStack2", rawTypeStack2, doubleElements);
22 testPop ("rawTypeStack2", rawTypeStack2);
23 testPush ("integerStack", integerStack, integerElements);
24 testPop ("integerStack", integerStack);
25} // asosiyni tugatish
26
27 // umumiy usul elementlarni stekga suradi
28 umumiy statik < T > void testPush (String nomi, Stack< T > stek,
29 T [] element)
30 {
31 System.out.printf("\nElementlarni %s ga surish\n", nom);
32
33 // elementlarni Stackga suring
34 uchun (T element: elementlar)
35 {
36 System.out.printf("%s", element);
37 stack.push( element ); // elementni stekga surish
38} // uchun tugatish
39} // testPush tugatish usuli
40
41 // testPop umumiy usuli stekdan elementlarni chiqaradi
42 umumiy statik < T > void testPop (String nomi, Stack< T > stek)
43 {
44 // stekdan ochilgan elementlar
45 urinib ko'ring
46 {
47 System.out.printf("\n%s dan elementlarni ochish\n", nomi);
48 T popValue; // stekdan olib tashlangan elementni saqlash
49
50 // Stack-dan elementlarni olib tashlang
51 vaqt (to'g'ri)
52 {
53 popValue = stack.pop (); // stekdan ochiladi
21.10 Umumiy sinflar va usullar.
Xom turdagi Stack o'zgaruvchisiga turdagi argumentni belgilaydigan Stack tayinlanishi mumkin. Stack obyekti sifatida quyidagicha: Ushbu topshiriqga ruxsat beriladi chunki Stack dagi elementlar (ya'ni, Double ob'ektlar) albatta obyektlardir. Xuddi shunday, o'z deklaratsiyasida turdagi argumentni belgilaydigan Stack o'zgaruvchisi bo'lishi mumkin. Quyidagi kabi xom turdagi Stack obyektini tayinladi: Bu topshiriqga ruxsat berilgan boʻlsada, bu xavfli, chunki xom turdagi stek saqlashi mumkin. Bunday holda, kompilyator xavfli topshiriqni ko'rsatadigan ogohlantirish xabarini chiqaradi. Umumiy sinf stack bilan xom turlaridan foydalanish 21.11-rasmdagi test dasturi xom turdagi tushunchasidan foydalanadi. 11-qator umumiy ko'rinishni keltirib chiqaradi. RawTypeStack1 har qanday obyektlarni saqlashi mumkinligini ko'rsatadigan xom turdagi stack sinf turi. 14-qator rawTypeStack2 o'zgaruvchisiga Stack ni tayinlaydi, bu o'zgaruvchi sifatida e'lon qilinadi. Xom turdagi stack: 17-qator Stack o'zgaruvchisiga xom turdagi Stackni tayinlaydi, bu qonuniydir, lekin kompilyatorga potentsial xavfli topshiriqni ko'rsatuvchi ogohlantirish xabarini chiqarishiga sabab bo'ladi (21.12-rasm) - yana, bu xom turdagi Stack turlarini saqlashi mumkinligi sababli yuzaga keladi. Shuningdek, 19-qatorlarda testPush va testPop umumiy usullariga qo'ng'iroqlar hisoblanadi. 22 natijasida kompilyator ogohlantirish xabarlari paydo bo'ladi (21.12-rasm). Bu rawTypeStack1 tufayli yuzaga keladi va rawTypeStack2 xom turdagi Stacks deb e'lon qilinadi, ammo testPush va usullari testPop har biri ma'lum turdagi argumentga ega Stack bo'lgan ikkinchi argumentni kutadi. The ogohlantirishlar kompilyator steklar tomonidan boshqariladigan turlarga kafolat bera olmasligini ko'rsatadi. 21.12-rasmda fayl yaratilganda kompilyator tomonidan yaratilgan ogohlantirish xabarlari ko'rsatilgan obyektdir. RawTypeTest.java (21.11-rasm) -Xlint:checked varianti bilan tuzilgan, bu generiklardan foydalanadigan koddagi potentsial xavfli operatsiyalar haqida ko'proq ma'lumot beradi. Birinchi ogohlantirish 17-qator uchun ishlab chiqariladi, bu esa xom-turdagi Stackni tayinlaydi. Stack o'zgaruvchisi - kompilyator Stackdagi barcha ob'ektlar bo'lishini ta'minlay olmaydi. Butun sonli obyektlar:Keyingi ogohlantirish 19-satrda sodir bo'ladi. Double massividan testPush turi argumenti uchinchi argument sifatida o'tdi, chunki ikkinchi usul argumenti xom-turdagi Stack o'zgaruvchisidir. Bunday holda, Double - bu tur argument, shuning uchun kompilyator ikkinchi argument sifatida Stack ni kutadi. Ogohlantirish kompilyator xom-turdagi Stackda faqat Doublelarni o'z ichiga olishiga ishonch hosil qila olmasligi sababli yuzaga keladi. 21-qatordagi ogohlantirish xuddi shu sababga ko'ra sodir bo'ladi, garchi haqiqiy Stack bu rawTypeStack2 havolalari Stack hisoblanadi. Kompilyator kafolat bera olmaydi o'zgaruvchi har doim bir xil Stack obyektiga murojaat qiladi, shuning uchun u e'lon qilingan o'zgaruvchidan foydalanishi kerak. 20 va 22-qatorlar har biri ogohlantirishlarni yaratadi, chunki usul testPop argument sifatida ko'rsatilgan Stackni kutadi. Biroq, testPop-ga har bir qo'ng'iroqda biz xom turdagi Stack o'zgaruvchisini o'tkazamiz. Shunday qilib, kompilyator ogohlantirishni bildiradi, chunki u usul tanasida ishlatiladigan turlarni tekshira olmaydi. Umuman olganda, siz xom turlarini ishlatishdan qochishingiz kerak.
Stack rawTypeStack2 = yangi Stack< Double > (5);
Stack< Integer > integerStack = new Stack (10);
21.7 Xom turlari
1 // 21.11-rasm: RawTypeTest.java
2 // Xom turdagi test dasturi.
3 umumiy sinf RawTypeTest4 {
5 ta umumiy statik bekor asosiy (String [] args)
6 {
7 Double [] doubleElements = {1.1, 2.2, 3.3, 4.4, 5.5};
8 Integer [] integerElements = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
19 testPush ("rawTypeStack1", rawTypeStack1, doubleElements);
20 testPop ("rawTypeStack1", rawTypeStack1);
21 testPush ("rawTypeStack2", rawTypeStack2, doubleElements);
22 testPop ("rawTypeStack2", rawTypeStack2);
23 testPush ("integerStack", integerStack, integerElements);
24 testPop ("integerStack", integerStack);
25} // asosiyni tugatish
26
27 // umumiy usul elementlarni stekga suradi
28 umumiy statik < T > void testPush (String nomi, Stack< T > stek,
29 T [] element)
30 {
31 System.out.printf("\nElementlarni %s ga surish\n", nom);
32
33 // elementlarni Stackga suring
34 uchun (T element: elementlar)
35 {
36 System.out.printf("%s", element);
37 stack.push( element ); // elementni stekga surish
38} // uchun tugatish
39} // testPush tugatish usuli
40
41 // testPop umumiy usuli stekdan elementlarni chiqaradi
42 umumiy statik < T > void testPop (String nomi, Stack< T > stek)
43 {
44 // stekdan ochilgan elementlar
45 urinib ko'ring
46 {
47 System.out.printf("\n%s dan elementlarni ochish\n", nomi);
48 T popValue; // stekdan olib tashlangan elementni saqlash
49
50 // Stack-dan elementlarni olib tashlang
51 vaqt (to'g'ri)
52 {
53 popValue = stack.pop (); // stekdan ochiladi
21.11-rasm | Xom turdagi test dasturi. (2-qismning 1-qismi.)
// Xom turdagi stek o'zgaruvchiga tayinlangan xom turdagi stek
Stack rawTypeStack1 = yangi Stack (5);
// Stack< Double > xom turdagi o'zgaruvchilar stackiga tayinlangan
Stack rawTypeStack2 = yangi Stack< Double > (5);
// Stack< Integer > o'zgaruvchisiga tayinlangan xom turdagi stek
Stack< Integer > integerStack = new Stack (10);
54 System.out.printf("%s", popValue);
55} // tugash vaqti
56} // urinishni tugatish
57 catch (EmptyStackException emptyStackException)
58 {
59 System.out.println();
60 ta emptyStackException.printStackTrace();
61} // end catch EmptyStackException
62} // tugatish usuli testPop
63 // oxirgi sinf RawTypeTest
Elementlarni rawTypeStack1 ga surish:
Xom turlari
1,1 2,2 3,3 4,4 5,5
rawTypeStack1 dan ochiladigan elementlar
5,5 4,4 3,3 2,2 1,1
EmptyStackException: Stack bo'sh, ochib bo'lmaydi.
Stack.pop da (Stack.java:32)
RawTypeTest.testPop da (RawTypeTest.java:53)
RawTypeTest.main da (RawTypeTest.java:20)
Elementlarni rawTypeStack2 ga surish
1,1 2,2 3,3 4,4 5,5
rawTypeStack2 dan elementlarni ochish
5,5 4,4 3,3 2,2 1,1
EmptyStackException: Stack bo'sh, ochib bo'lmaydi.
Stack.pop da (Stack.java:32)
RawTypeTest.testPop da (RawTypeTest.java:53)
RawTypeTest.main da (RawTypeTest.java:22) IntegerStack-ga elementlarni surish
1 2 3 4 5 6 7 8 9 10
integerStack dan elementlarni ochish
10 9 8 7 6 5 4 3 2 1
EmptyStackException: Stack bo'sh, ochib bo'lmaydi
Stack.pop da (Stack.java:32)
RawTypeTest.testPop da (RawTypeTest.java:53)
RawTypeTest.main da (RawTypeTest.java:24)
RawTypeTest.java: 17: ogohlantirish: [belgilanmagan] tekshirilmagan konvertatsiya
topildi: Stack
talab qilinadi: Stack
Stack< Integer > integerStack = new Stack (10);
RawTypeTest.java: 19: ogohlantirish: [checked] tekshirilmagan konvertatsiya
topildi: Stack
talab qilinadi: Stack< java.lang.Double>
testPush("rawTypeStack1", rawTypeStack1, doubleElements);
21.12-rasm | Kompilyatordan ogohlantirish xabarlari. (2-qismning 1-qismi.)
21.11-rasm | Xom turdagi test dasturi. (2-qismning 2-qismi.)
21.8 Tur parametrlarini qabul qiluvchi usullardagi joker belgilar
21.8 Turni qabul qiluvchi usullardagi joker belgilar
Parametrlar: Ushbu bo'limda biz joker belgilar deb nomlanuvchi kuchli generik tushunchani taqdim etamiz. Buning uchun biz java.util paketidan yangi ma'lumotlar tuzilmasini ham kiritamiz. 20-bobda biz Java Collections Framework-ni muhokama qildik, u ko'plab umumiy ma'lumotlarni taqdim etadi.In ma'lumotlar tuzilmalarining elementlarini boshqaradigan algoritm. Ehtimol, ushbu ma'lumotlar tuzilmalarining eng oddiyi ArrayList sinfidir - dinamik ravishda o'zgartiriladigan, massivga o'xshash ma'lumotlar tuzilmasi. Ushbu muhokamaning bir qismi sifatida siz ArrayListni qanday yaratishni o'rganasiz, unga elementlar qo'shing va kengaytirilgan for bayonotidan foydalanib, ushbu elementlarni kesib o'ting. Keling, joker belgilarni rag'batlantiradigan misolni ko'rib chiqaylik. Aytaylik, siz ArrayList kabi to'plamdagi raqamlarni jamlaydigan umumiy usul yig'indisini amalga oshirishni xohlaysiz. Siz to'plamga raqamlarni kiritishdan boshlaysiz. Chunki umumiy sinflardan foydalanish mumkin, faqat sinf yoki interfeys turlari bilan, raqamlar typeRawTypeTest.java:19 obyektlari sifatida avtomatik qutiga joylashtiriladi: ogohlantirish: [checked] belgilanmagan usulni chaqirish:
testPush(java.lang.String,Stack,T[]) RawTypeTest-da qo'llaniladi
(java.lang.String,Stack,java.lang.Double[])
testPush ("rawTypeStack1", rawTypeStack1, doubleElements);
RawTypeTest.java: 20: ogohlantirish: [checked] tekshirilmagan konvertatsiya
topildi: Stack
talab qilinadi: Stack
testPop ("rawTypeStack1", rawTypeStack1);

RawTypeTest.java:20: ogohlantirish: [belgilanmagan] belgilanmagan usulni chaqirish:


testPop(java.lang.String,Stack) RawTypeTest-da qo'llaniladi
(java.lang.String,Stack)
testPop("rawTypeStack1", rawTypeStack1);
RawTypeTest.java: 21: ogohlantirish: [checked] tekshirilmagan konvertatsiya
topildi: Stack
talab qilinadi: Stack
testPush("rawTypeStack2", rawTypeStack2, doubleElements);
RawTypeTest.java:21: ogohlantirish: [checked] belgilanmagan usulni chaqirish:
testPush(java.lang.String,Stack,T[]) RawTypeTest-da qo'llaniladi
(java.lang.String,Stack,java.lang.Double[])
testPush("rawTypeStack2", rawTypeStack2, doubleElements);
RawTypeTest.java: 22: ogohlantirish: [checked] tekshirilmagan konvertatsiya
topildi: Stack
talab qilinadi: Stack
testPop ("rawTypeStack2", rawTypeStack2);
RawTypeTest.java:22: ogohlantirish: [belgilanmagan] belgilanmagan usulni chaqirish:
testPop(java.lang.String,Stack) RawTypeTest-da qo'llaniladi
(java.lang.String,Stack)
testPop ("rawTypeStack2", rawTypeStack2);
21.12-rasm | Kompilyatordan ogohlantirish xabarlari. (2-qismning 2-qismi.)
21-bob Umumiy sinflar va usullar
Misol uchun, har qanday int qiymati Integer ob'ekti sifatida autoboxed bo'ladi va har qanday juft qiymat Double ob'ekt sifatida autoboxed bo'ladi. Biz hammasini jamlay olishni xohlaymiz Shu sababli, biz ArrayListni Number argumenti turi bilan e'lon qilamiz Integer ham, Double ham super klassi.
Bundan tashqari, sum usuli ArrayList tipidagi parametrni va uning umumiy qiymatini oladigan element. 21.13-rasmda Raqamlar qatori ro'yxatining elementlari jami ko'rsatilgan. 11-qator Raqamlar massivini e'lon qiladi va ishga tushiradi. Initsializatorlar ibtidoiy qiymatlar bo'lganligi sababli, Java har bir ibtidoiy qiymatni mos keladigan o'ramning ob'ekti sifatida avtomatik qutilarga joylashtiradi. 1 va 3 int qiymatlari Integer ob'ektlari sifatida avtomatik qutiga joylashtirilgan va qo'sh qiymatlar 2.4 va 4.1 Double obyektlar sifatida autoboxed qilingan. 12-qator ArrayList obyektini e'lon qiladi va yaratadi u raqamlarni saqlaydi va uni numberList o'zgaruvchisiga tayinlaydi. Aniqlashtirishimiz shart bo’lmagan ArrayList hajmi, chunki biz obyektlarni kiritganimizda u avtomatik ravishda o'sib boradi.
1 // 21.13-rasm: TotalNumbers.java
2 // ArrayListdagi sonlarni jamlash.
3 import java.util.ArrayList;
45
umumiy toifadagi TotalNumbers
6 {
7 ta umumiy statik bekor asosiy ( String [] args )
8 {
9 // o'z ichiga olgan Raqamlar ArrayListini yaratish, ishga tushirish va chiqarish
10 // Integers va Doubles, so'ngra elementlarning umumiy sonini ko'rsatadi
11
12
13
14 uchun (Raqam elementi: raqamlar)
15
16
17 System.out.printf("raqamlar roʻyxatida: %s\n",);
18 System.out.printf("Raqamlar roʻyxatidagi elementlarning umumiy soni: %.1f\n",
19);
20} // asosiyni tugatish
21
22 // ArrayList elementlarining umumiy sonini hisoblang
23 umumiy statik ikki tomonlama yig'indi (ro'yxat)
24 {
25 juft jami = 0; // jami ishga tushirish
26
27 // summani hisoblang
28
29
30
Jami 31 daromad;
32} // yakuniy usul summasi
33} // yakuniy sinf TotalNumbers
numberList tarkibiga quyidagilar kiradi: [1, 2.4, 3, 4.1]
Raqamlar ro'yxatidagi elementlarning umumiy soni: 105
21.13-rasm | ArrayListdagi sonlarni jamlash.
Raqam [] raqamlar = {1, 2.4, 3, 4.1}; // Butun sonlar va juftliklar
ArrayList< Number > numberList = new ArrayList< Number > ();
numberList.add (element); // har bir raqamni raqamlar ro'yxatiga joylashtiring.
Raqamlar ro'yxati:
yig'indisi (raqamlar ro'yxati)
ArrayList< Raqam > uchun (raqam elementi: ro'yxat)
jami += element.doubleValue();
21.8 Tur parametrlarini qabul qiluvchi usullardagi joker belgilar
14-15 qatorlar massiv raqamlarini o'tkazing va har bir elementni numberListga joylashtiring.
ArrayList tarkibini String sifatida chiqaradi. Bu bayonot bilvosita chaqiradi.
ArrayListning toString usuli, bu “[elementlar]” shaklidagi satrni qaytaradi. elementlar vergul bilan ajratilgan elementlar roʻyxatidir. 18–19 qatorlar sum usuliga chaqiruv orqali qaytariladigan elementlar yig'indisini ko'rsatadi. Usul yig'indisi (23–32-qatorlar) Raqamlar qatori ro'yxatini oladi va umumiy miqdorni hisoblaydi. Usul hisob-kitoblarni bajarish uchun ikkilamchi qiymatlardan foydalanadi va natijani ikki barobar qilib qaytaradi. 28–29 qatorlar kengaytirilgan for bayonotidan foydalanadi. ArrayList elementlarini jamlash uchun massivlar va Collections Framework to'plamlari bilan ishlash uchun mo'ljallangan. For bayonoti har bir raqamni belgilaydi. ArrayList-ni o'zgaruvchi elementga kiriting, keyin doubleValue Number usulidan foydalana olish uchun chiqariladi. Raqamning asosiy ibtidoiy qiymati ikki tomonlama qiymat sifatida. Natija jamiga qo'shiladi. Uning parametrida joker belgilar turi argumenti bilan usul summasini amalga oshirishdir. Eslatib o'tamiz, 21.13-rasmdagi yig'indi usulining maqsadi saqlangan har qanday turdagi raqamlarni jamlash edi. ArrayList ichida biz Integer va ikkalasini o'z ichiga olgan Raqamlar ArrayListini yaratdik.
Ikki tomonlama obyektlar:
21.13-rasmdagi ma'lumotlar yig'indisi usul to'g'ri ishlaganligini ko'rsatadi. Usul summasi ArrayList of Numbers elementlarini jamlashi mumkinligini hisobga olsak, bu usul faqat bitta elementlarni o'z ichiga olgan ArrayLists uchun ham ishlashini kutishingiz mumkin. Shunday qilib, biz yaratish uchun TotalNumbers sinfini o'zgartirdik. Butun sonlar ArrayList va uni sum usuliga o'tkazing. Dasturni kompilyatsiya qilganimizda, kompilyator quyidagi xato xabarini chiqaradi: Number Integer ning yuqori sinfi bo'lsa-da, kompilyator ArrayList parametrlangan turini ArrayList ning yuqori sinfi deb hisoblamaydi. Agar shunday bo'lsa, keyin ArrayList da bajarishimiz mumkin bo'lgan har bir operatsiya ArrayListda ham ishlaydi. ArrayList ga Double obyektini qo'shishingiz mumkinligini ko'rib chiqing, chunki Double - bu raqam, lekin Double obyektini qo'sha olmaymiz. ArrayList chunki Double butun son emas. Shunday qilib, subtip munosabatlari kutmaydi. Raqamning istalgan kichik sinfi elementlarini o'z ichiga olgan har qanday ArrayList elementlarini jamlay oladigan summa usulining yanada moslashuvchan versiyasini qanday yaratamiz? Bu joy joker belgilar turi argumentlariga muhim hisoblanadi. Joker belgilar sizga usul parametrlarini, qaytariladigan qiymatlarni, o'zgaruvchilar yoki maydonlarni va hokazolarni belgilash imkonini beradi, ular supertiplar yoki pastki tiplar sifatida ishlaydi.
21.14-rasmda usul summasining parametri 50-satrda e'lon qilingan.Joker tipdagi argument savol belgisi (?) bilan belgilanadi, bu oʻz-oʻzidan aniq ifodalaydigan "noma'lum tur." Bunday holda, joker belgi sinf raqamini kengaytiradi, bu degani joker belgida Raqamning yuqori chegarasi mavjud. Shunday qilib, noma'lum turdagi argument Raqam yoki Raqamning pastki sinfi bo'lishi kerak. Bu erda ko'rsatilgan parametr turi bilan, usul summasi bo’lishi mumkin. ArrayList< kabi har qanday raqam turini o'z ichiga olgan ArrayList argumentini oling Integer> (20-qator), ArrayList (33-qator) yoki ArrayList (46-qator).
sum(java.util.ArrayList) TotalNumbersErrors ichida
(java.util.ArrayList) ga qoʻllash mumkin emas.
ArrayList
21-bob Umumiy sinflar va usullar
1 // 21.14-rasm: WildcardTest.java
2 // Wildcard test dasturi.
3 import java.util.ArrayList;
45
umumiy sinf WildcardTest
6 {
7 ta umumiy statik bekor asosiy (String [] args)
8 {
9 // Butun sonlar ArrayListini yarating, ishga tushiring va chiqaring
10 // elementlarning umumiy miqdorini ko'rsatish
11 Integer [] integers = {1, 2, 3, 4, 5};
12}
13
14 // integerList-ga elementlarni kiriting
15 uchun (Integer element: integers)
16 integerList.add (element);
17
18 System.out.printf("integerList tarkibida: %s\n", integerList);
19 System.out.printf("IntegerListdagi elementlarning jami: %.0f\n\n",
20); 21
22 // ArrayList of Doubles ni yarating, ishga tushiring va chiqaring, keyin
23 // elementlarning umumiyligini ko'rsatish
24 Double [] ikki barobar = {1,1, 3,3, 5,5};
25
26
27 // doubleList-ga elementlarni kiriting
28 uchun (Doubleelement:double )
29 doubleList.add (element);
30
31 System.out.printf("doubleList tarkibida: %s\n", doubleList);
32 System.out.printf("DoubleListdagi elementlarning umumiy soni: %.1f\n\n",
33);
34
35 // o'z ichiga olgan Raqamlar ArrayListini yarating, ishga tushiring va chiqaring
36 // Integers ham, Doubles ham, so'ngra elementlarning umumiy sonini ko'rsatadi
37 ta raqam [] raqamlar = {1, 2.4, 3, 4.1}; // Butun sonlar va juftliklar
38
39
40 // numberList-ga elementlarni kiriting
41 uchun (Raqam elementi: raqamlar)
42 numberList.add(element);
43
44 System.out.printf("numberList tarkibida: %s\n", numberList );
45 System.out.printf("Raqamlar roʻyxatidagi elementlarning umumiy soni: %.1f\n",
46);
47} // asosiyni tugatish
48
49 // elementlarning umumiy soni; ArrayList parametrida joker belgidan foydalanish
50 umumiy statik ikki tomonlama summa (roʻyxat)
51 {
52 juft jami = 0; // jami ishga tushirish
53
21.14-rasm | Umumiy joker belgilar test dasturi. (2-qismning 1-qismi.)
ArrayList< Integer > integerList = new ArrayList< Integer > ();
summa (integerList)
ArrayList< Double > doubleList = yangi ArrayList< Double > ();
summa (doubleList)
ArrayList< Number > numberList = new ArrayList< Number > ();
yig'indisi (raqamlar ro'yxati)
ArrayList
21.9 Generics va meros: Eslatmalar
11–20 qatorlar ArrayList ni yaratadi va ishga tushiradi, uning elementlarini chiqaradi va sumni chaqirish usuli bo'yicha ularni jami (20-satr). 24–33 qatorlar xuddi shu amallarni bajaradi. 37-46 qatorlar butun sonlar va juftlarni o'z ichiga olgan ArrayList uchun bir xil amallarni bajaradi. Usul summasida (50–59-qatorlar), garchi ArrayList argumentining element turlari usuli bilan to'g'ridan-to'g'ri ma'lum bo’lmasa ham, ular hech bo'lmaganda Number turiga ma'lum, chunki joker belgi yuqori chegara Raqam bilan ko'rsatilgan. Shuning uchun 56-qatorga ruxsat beriladi, chunki barcha Number obyektlarida doubleValue usuli mavjud. Parametrlashtirilgan turlarni usulga o'tkazishda joker belgilar moslashuvchanlikni ta'minlasa ham, ularning kamchiliklari ham bor lekin tip-parametr nomini belgilamaydi, siz uni butun tur nomi sifatida ishlata olmaysiz. Usul tanasi (ya'ni, siz 55-qatordagi Raqamni ? bilan almashtira olmaysiz). Usul summasini quyidagicha e'lon qiling: Bu usul har qanday raqamning elementlarini o'z ichiga olgan ArrayListni olish imkonini beradi. Keyin butun usul tanasida T turi parametridan foydalanishingiz mumkin. Agar joker belgi yuqori chegarasiz ko'rsatilgan bo'lsa, u holda faqat tiplash usullari Obyekt joker belgilar turidagi qiymatlarda chaqirilishi mumkin. Shuningdek, joker belgilarni ishlatadigan usullar ularning parametrlari turi argumentlarini havola qilingan to'plamga elementlar qo'shish uchun ishlatib bo'lmaydi.
21.9 Generiklar va meros: Eslatmalar
Generics meros bilan bir necha usulda ishlatilishi mumkin: Umumiy sinf umumiy bo'lmagan sinfdan olinishi mumkin. Masalan, Obyekt sinf har bir umumiy sinfning bevosita yoki bilvosita yuqori sinfidir.
54 // summani hisoblang
55 uchun (Raqam elementi: ro'yxat)
56 jami += element.doubleValue();
57
Jami 58 daromad;
59} // yakuniy usul summasi
60} // yakuniy sinf WildcardTest
integerList tarkibiga quyidagilar kiradi: [1, 2, 3, 4, 5]
IntegerListdagi elementlarning umumiy soni: 15
doubleList tarkibiga quyidagilar kiradi: [1.1, 3.3, 5.5]
DoubleListdagi elementlarning umumiy soni: 9.9
numberList tarkibiga quyidagilar kiradi: [1, 2.4, 3, 4.1]
Raqamlar ro'yxatidagi elementlarning umumiy soni: 10.5
umumiy statik ikki marta yig'indi (ArrayList< T > ro'yxati)
Umumiy dasturlash xatosi:
Usulning tip-parametr qismida joker belgidan foydalanish yoki aniq belgi sifatida joker belgidan foydalanish usul tanasidagi o'zgaruvchining turi sintaksis xatosidir.
21.14-rasm | Umumiy joker belgilar test dasturi. (2-qismning 2-qismi.)
21-bob Umumiy sinflar va usullar
• Umumiy sinf boshqa umumiy sinfdan olinishi mumkin. Masalan, umumiy class Stack (java.util paketida) umumiy Vektor sinfining quyi sinfidir (java.util paketida). • Umumiy bo'lmagan sinf umumiy sinfdan olinishi mumkin. Masalan, umumiy bo'lmagan. Xususiyatlar sinfi (java.util paketida) Hashtable umumiy sinfining pastki sinfidir (java.util paketida). Biz bu sinflarni 20-bobda ham muhokama qildik.
• Nihoyat, agar ikkala usul ham bir xil imzoga ega bo'lsa, pastki sinfdagi umumiy usul superklassdagi umumiy usulni bekor qilishi mumkin.
21.10 Yakunlash
Ushbu bobda generiklar kiritilgan. Siz umumiy usullar va sinflarni qanday e'lon qilishni o'rgandingiz. Xom turlar orqali orqaga qarab muvofiqlikka qanday erishish mumkinligini muhokama qildik. Siz ham qanday qilib o'rgandingiz. Umumiy usulda yoki umumiy sinfda joker belgilardan foydalanish. 22-bobda siz qanday qilishni o'rganasiz.
ijro etilayotganda o'sishi yoki qisqarishi mumkin bo'lgan shaxsiy dinamik ma'lumotlar tuzilmalaringizni amalga oshiring
vaqt. Xususan, siz ushbu ma'lumotlar tuzilmalarini umumiy imkoniyatlardan foydalangan holda amalga oshirasiz. Jeneriklar haqida qoʻshimcha maʼlumot olish uchun www.deitel.com/Java/ manzilidagi Java Resurs Markazimizga tashrif buyuring va “Java Generics” mavzusini bosing.
Sarlavha Resurs markazi tarkibi.
Xulosa
21.1-bo'lim Kirish
• Umumiy usullar sizga bitta usul deklaratsiyasi bilan bog'liq usullar to'plamini belgilash imkonini beradi.
• Umumiy sinflar va interfeyslar sizga tegishli turlar to'plamini belgilash imkonini beradi.
21.2-bo'lim Umumiy usullar uchun motivatsiya
• Har xil turdagi ma'lumotlarga o'xshash operatsiyalarni bajarish uchun ko'pincha ortiqcha yuklangan usullar qo'llaniladi.
• Kompilyator usul chaqiruviga duch kelganda, u usul deklaratsiyasini a bilan topishga harakat qiladi
usul chaqiruvidagi argument turlariga mos keladigan nom va parametrlar.
21.3-bo'lim Umumiy usullar: Amalga oshirish va kompilyatsiya vaqti tarjimasi
• Agar bir nechta haddan tashqari yuklangan usullar bilan bajariladigan amallar har bir argument turi uchun bir xil bo'lsa,
ular umumiy usul yordamida yanada ixcham va qulayroq kodlanishi mumkin. Yagona umumiy usul deklaratsiyasini har xil turdagi ma'lumotlarning argumentlari bilan chaqirish mumkin. Turlari asosida argumentlar umumiy usulga o'tgan bo'lsa, kompilyator har bir usul chaqiruvini mos ravishda boshqaradi.
• Barcha umumiy usul deklaratsiyasida burchakli qavslar (< va >) bilan chegaralangan, usulning qaytarish turidan (878-bet) oldin tur parametrlari bo‘limi (878-bet) mavjud. Tur-parametr bo'limi vergul bilan ajratilgan bir yoki bir nechta turdagi parametrlarni o'z ichiga oladi.
• Tur parametri (878-bet) umumiy tip nomini bildiruvchi identifikatordir. Tip parametrlari umumiy usul deklaratsiyasida qaytarish turi, parametr turlari va mahalliy o'zgaruvchilar turlari sifatida foydalanish mumkin. Keyin ular umumiy usulga o'tkazilgan argumentlar turlari uchun to'ldiruvchi vazifasini bajaradi. Tur parametrlari faqat mos yozuvlar turlarini ifodalashi mumkin.
• Usul deklaratsiyasida foydalaniladigan tip-parametr nomlari e'lon qilinganlarga mos kelishi kerak tip-parametr bo'limi. Tip-parametr nomi faqat bir marta tip-parametrda e'lon qilinishi mumkin.
Xulosa:
• Kompilyator usul chaqiruviga duch kelganda, u argument turlarini va urinishlarini aniqlaydi argument turlariga mos keladigan bir xil nom va parametrlarga ega usulni toping. Bunday usul bo'lmasa, kompilyator bir xil nomli va mos parametrlarga ega usullarni va mos keladigan umumiy usullarni qidiradi.
• Umumiy interfeysni amalga oshiradigan sinf ob'ektlari Comparable (Comparable) solishtirish mumkin. Agar obyektlar teng bo'lsa, 0 ni, agar qiymatlar teng bo'lsa, manfiy butun sonni qaytaradigan compareTo usuli bilan birinchi obyekt ikkinchidan kichik yoki birinchi ob'ekt ikkinchidan katta bo'lsa, musbat butun son.
• Primitiv turlar uchun barcha turdagi o'rash sinflari Comparable ni amalga oshiradi.
• Taqqoslanadigan obyektlardan Collections sinfining saralash va qidirish usullari bilan foydalanish mumkin.
• Umumiy usul kompilyatsiya qilinganda, kompilyator o'chirishni amalga oshiradi (879-bet) typeparameter bo'limini olib tashlash va tip parametrlarini haqiqiy turlarga almashtirish. Sukut bo'yicha har bir turdagi parametr o'zining yuqori chegarasi (881-bet) bilan almashtiriladi, agar boshqacha ko'rsatilmagan bo'lsa, bu obyektdir.
21.4-bo'lim Qo'shimcha kompilyatsiya vaqti tarjimasi muammolari: Turdan foydalanadigan usullar
Qaytish turi sifatida parametr
• Oʻchirish turi oʻzgaruvchini qaytaruvchi usulda bajarilganda (878-bet), aniq translatsiyalar amalga oshiriladi. Qaytarilgan qiymat kutilgan turga ega bo'lishini ta'minlash uchun har bir usul chaqiruvi oldiga kiritilgan qo'ng'iroq qiluvchidir.
21.5-bo'lim Umumiy usullarni ortiqcha yuklash
• Umumiy usul boshqa umumiy usullar yoki umumiy bo'lmagan usullar bilan ortiqcha yuklanishi mumkin.
21.6-bo'lim Umumiy sinflar
• Umumiy sinflar sinfni turga bog'liq bo'lmagan tarzda tavsiflash uchun vositani taqdim etadi. Biz bajara olamiz keyin umumiy sinfning turiga xos obyektlarni yarating.
• Umumiy sinf deklaratsiyasi umumiy bo‘lmagan sinf deklaratsiyasiga o‘xshaydi, bundan tashqari sinf nomi
keyin tip-parametr bo'limi. Umumiy sinfning tip-parametr bo'limi bitta bo'lishi mumkin, yoki bir nechta turdagi parametrlar vergul bilan ajratilgan.
• Umumiy sinf kompilyatsiya qilinganda, kompilyator sinf turi parametrlarida o'chirishni amalga oshiradi va ularni yuqori chegaralari bilan almashtiradi.
• Tur parametrlarini sinfning statik deklaratsiyasida ishlatib bo‘lmaydi.
• Umumiy sinf ob'ektini instantsiyalashda sinfdan keyin burchakli qavslarda ko'rsatilgan turlar nomlar argumentlar sifatida tanilgan. Kompilyator ularni tip parametrlarini almashtirish uchun ishlatadi, shunda u tipni tekshirishni amalga oshiradi va kerak bo'lganda translatsiya operatsiyalarini kiritadi.
21.7-bo'lim Xom turlari
• Tur argumentini ko'rsatmasdan umumiy sinfni yaratish mumkin. Bunday holda, yangi sinf obyekti xom turiga ega deyiladi. Kompilyator ob'ekt turini bilvosita ishlatadi (yoki turdagi parametrning yuqori chegarasi) har bir turdagi argument uchun umumiy sinf bo'ylab yechiladi.
21.8-bo'lim Tur parametrlarini qabul qiluvchi usullardagi joker belgilardir
• Class Number ham Integer, ham Doublening yuqori sinfidir.
• DoubleValue raqam usuli (897-bet) Raqamning asosiy ibtidoiy qiymatini ikkilik sifatida oladigan qiymat. Joker belgilar turi argumentlari usul parametrlarini, qaytariladigan qiymatlari hisoblanadi. Shunday qilib, ular parametrlangan turlarning supertiplari sifatida ishlaydi. Joker belgilar tipidagi argument bilan belgilanadi? Joker belgining yuqori chegarasi ham bo'lishi mumkin.
21-bob Umumiy sinflar va usullar
• Joker belgi (?) tip-parametr nomi emasligi sababli, siz uni butun tur nomi sifatida ishlata olmaysiz.
• Agar joker belgi yuqori chegarasiz ko'rsatilgan bo'lsa, u holda faqat Object tipidagi usullar bo'lishi mumkin. Joker belgilar turi qiymatlarida chaqiriladi.
• Tur argumentlari sifatida joker belgilardan foydalanadigan usullardan (897-bet) parametr tomonidan havola qilingan to‘plamga elementlar qo‘shish uchun ishlatib bo‘lmaydi.
21.9-bo'lim Generiklar va meros: Eslatmalar
• Umumiy sinf umumiy bo'lmagan sinfdan olinishi mumkin. Masalan, Obyekt to'g'ridan-to'g'ri yoki bilvosita
har bir umumiy sinfning super klassi.
• Umumiy sinf boshqa umumiy sinfdan olinishi mumkin.
• Umumiy bo'lmagan sinf umumiy sinfdan olinishi mumkin.
• Agar ikkala usul ham boʻlsa, quyi sinfdagi umumiy usul supersinfdagi umumiy usulni bekor qilishi mumkin
O'z-o'zini tekshirish mashqlari:
21.1 (To'g'ri yoki noto'g'ri) Quyidagilarning har biri to'g'ri yoki noto'g'ri ekanligini ayting. Agar yolg'on bo'lsa, sababini tushuntiring.
a) Umumiy usul umumiy bo'lmagan usul bilan bir xil usul nomiga ega bo'lishi mumkin emas.
b) Barcha umumiy usul e'lonlari darhol usul nomidan oldin tur parametr bo'limiga ega.
c) Umumiy usul xuddi shu usul bilan boshqa umumiy usul bilan ortiqcha yuklanishi mumkin.
d) Tip parametri tip-parametr bo'limida faqat bir marta e'lon qilinishi mumkin, lekin usul parametrlari ro'yxatida bir necha marta paydo bo'lishi mumkin.
e) Turli xil umumiy usullar orasidagi tip-parametr nomlari yagona bo'lishi kerak. f) Umumiy sinf turi parametrining doirasi uning statik a'zolaridan tashqari butun sinfdir.
21.2 (Bo'sh joylarni to'ldiring) Quyidagilarning har biridagi bo'sh joylarni to'ldiring:
a) va sizga bitta usul deklaratsiyasi bilan bir qatorni belgilash imkonini beradi
tegishli usullar yoki bitta sinf deklaratsiyasi bilan, mos ravishda tegishli turlar to'plami.
b) Tur-parametr kesimi bilan chegaralangan.
c) Usulning argument turlarini aniqlash uchun umumiy usuldan foydalanish mumkin.
d) "Stack objectStack = new Stack();" bayonoti. objectStack saqlashini bildiradi
e) Umumiy sinf deklaratsiyasida sinf nomidan keyin a(n).
f) Sintaksis joker belgining yuqori chegarasi T turi ekanligini bildiradi.
O'z-o'zini tekshirish mashqlariga javoblar:
21.1 a) Noto'g'ri. Umumiy va umumiy bo'lmagan usullar bir xil usul nomiga ega bo'lishi mumkin. Umumiy usul bir xil usul nomiga ega, ammo boshqa usul bilan boshqa umumiy usulni ortiqcha yuklashi mumkin. Umumiy usulni umumiy bo'lmagan usullar bilan ta'minlash orqali ham ortiqcha yuklash mumkin.
b) yolg'on. Barcha umumiy usul deklaratsiyasi mavjud
usulning qaytish turidan darhol oldin turuvchi parametr bo'limi. c) To'g'ri. d) To'g'ri.
e) yolg'on. Turli xil umumiy usullar orasidagi parametr nomlari yagona bo'lishi shart emas. f) To'g'ri.
21.2 a) Umumiy usullar, umumiy sinflar. b) burchakli qavslar (< va >). c) tip parametrlari. d) axom turi. e) tip-parametr bo'limi. f) ? T.ni kengaytiradi.
Mashqlar:
21.3 (Notatsiyani tushuntiring) Java dasturida quyidagi yozuvlardan foydalanishni tushuntiring:
umumiy sinf Massivi< T > {}
21.4 (Umumiy usul tanlashSort) Umumiy usul tanlashSortni yozing asosida Shakllarning tartiblash dasturi. 19,6–19,7. Integer massivi va Float massivini kirituvchi, tartiblovchi va chiqaradigan test dasturini yozing. [Maslahat: f tip-parametr qismida > dan foydalaning

Download 99.4 Kb.




Download 99.4 Kb.

Bosh sahifa
Aloqalar

    Bosh sahifa



Umumiy sinflar va usullar Ushbu bo'limda siz quyidagilarni bilib olasiz

Download 99.4 Kb.