KompüterProqramlaşdırma

Java Generics: təsviri və metodları

Java dilinin görünüşü ilə başlayan şübhəsiz onun funksionallığı müsbət anlar gətirilən dəyişikliklər bir çox üzləşib. Bu əhəmiyyətli dəyişikliklərdən biri Java Generic ya ümumiləşdirmələr giriş. Bu işlevsellik dil daha çevik və hərtərəfli, həm də məlumat növləri gətirilməsi baxımından daha təhlükəsiz etmək deyil.

fakt Java ümumi kodu generics tətbiqi əvvəl növü arayış Obyekt baxımından deyil, yaradıla bilər. Bu bağlantılar hər hansı bir obyekt təyin edilə bilər. Bütün sonra, Java dərsləri gizli Object class varisləri. Lakin, bu yanaşma hədəf növü Obyekt bir obyekt aydın dönüşüm təhlükəsizlik növləri ilə bağlı bir çox səhvlər potensial mənbəyidir. ümumiləşdirmələr istifadə edərkən bütün salır səhvlər hətta potensial aradan qaldırılması, dolayısı və avtomatik olaraq həyata keçirilir.

Java Generics: təsviri və nümunəsi

Aşağıdakı rəqəm müntəzəm dərsləri ümumiləşdirilməsi tətbiqi sadə nümunəyə nəzər salaq. Və sonra bütün incəliklərini və Java Generic nüanslar ətraflı müayinə davam etdirilir.

sinif bəyannamə Pair baş verən yol diqqət yetirin. Dərhal sinif adına məktub T. göstərilən açıq bucaqlı mötərizədə Bu xüsusi bir növü ilə əvəz olunacaq Bu sinif bir misal yaradılması prosesi doldurucu bir növ edir. Bu aşağıdakı kimi görünür: Pair obj = new Pair (). Əvəzinə T T, V və ya E. istifadə, bir qayda olaraq, hər hansı bir məktub daxil, lakin qeyd etmək lazımdır ki

Qeyd: boş qala bilər konstruktor arayış bucaq mötərizədə elan zaman hədəf növü ifadə, Java səkkizinci versiyası ilə başlayır. Yuxarıdakı misal kimi yenidən edilə bilər, belə: Pair obj = new Pair <> ().

bir sinif sahələrdə, bağlantılar, siz ki, məktub istifadə edə bilərsiniz üsullarla geri obyektlərin xüsusi növ əvəzinə onun bədənində sonra, belə bir şəkildə elan olunur. T-ci ildən sinif obyekt bu halda birinci və ikinci sahələri növü Tamsayı olacaq xüsusi bir növü ilə əvəz olunur oluştururken.

dəlilləri və firstItem secondItem məntiqi sonra da tipli tam və ya yarımsinif olmalıdır müvafiq konstruktor edilir. Bir obyekt oluştururken ifadə nə fərqli bir veri növü ötürmək üçün cəhd etsəniz, compiler bu səhvi imkan verəcək. Belə ki, bir obyekt kimi olacaq dəlilləri konstruktor belə: Pair obj = new Pair <> (yeni Integer (1), yeni Tam (2)). eyni arqumentlər və üsulları setFirst setSecond aiddir. Və yəqin ki, üsulları getFirst getSecond təxmin etdiyiniz və növü tam bir dəyər qayıtmaq edəcək.

bir neçə parametrləri sinif növləri ilə ümumiləşdirilir

ümumiləşdirilmiş dərsləri də bir vergül ilə bucaq mötərizədə müəyyən edilir növü çox parametrləri elan edə bilər. Pair sinif aşağıda təqdim olunur ki, bir halda yenidən.

Gördüyünüz kimi bucaq mötərizədə bu sinif bir misal yaratmaq zaman, parametrləri kimi növ eyni sayda göstərməlidir. Bir Map kimi data strukturu bu növü ilə tanış varsa, bu eyni prinsipi istifadə edir ki, görürük. dəyəri növü - Orada ilk arqument əsas növü və ikinci göstərilmişdir. Bu yolla növləri bir obyekt dəlilləri üst-üstə bilər ki, qeyd etmək lazımdır. Məsələn, aşağıdakı ad Pair sinif instansiya tamamilə doğru: Pair obj.

ümumiləşdirmələr bəzi xüsusiyyətləri

daha davam əvvəl, Java compiler sinif Pair müxtəlif versiyasını yaratmaq deyil ki, qeyd etmək lazımdır. Əslində, bir ümumiləşdirilmiş növü bütün məlumat tərtib prosesi silinir. Bunun yerine, Pair sinif xüsusi versiyasını yaratmaq, müvafiq növ gətirir. Lakin, proqram hələ sinif yalnız bir ümumi versiyası var. Bu proses Java Generic təmizləmə növü adlanır.

əhəmiyyətli bir nöqtəyə unutmayın. Eyni java generic sinif müxtəlif versiyasını bağlantılar bir və eyni obyekt qeyd edə bilməz. Pair obj1 və Pair obj2: O, iki links var Güman olunur. Nəticədə istiqamətində obj1 = obj2 bir səhv. həm dəyişənlərin Pair növü olsa da, obyektlərin onlar müraciət, fərqlidir. Bu Java Generic təhlükəsizlik növləri bir baş nümunəsidir.

generic dərsləri məhdudiyyətlər

Bu ümumiləşdirmələr növ istinad tətbiq edilə bilər ki, bilmək vacibdir ki, parametrləri bir sinif növü olmalıdır generic sinif java arqument keçmək üçün. ikiqat və ya uzun belə məsələn, bu sadə növləri, transfer edilə bilməz. Başqa sözlə, aşağıdakı xətt Pair sinif bəyannamə icazə verilmir: Pair obj. Hər ibtidai növü üçün müvafiq Java banderol sinif var kimi Lakin, bu məhdudiyyət ciddi bir problem deyil. Ciddi desək, sinif Pair bir tam və Boolean dəyər avtoupakovka hər şey üçün nə içine istəyirsinizsə: Pair obj = new Pair <> (25 doğru).

Başqa bir ciddi məhdudiyyət parametr növü nümunəsini yaratmaq mümkün deyil. Məsələn, aşağıdakı xətti yığma səhv səbəb olacaq: T ilk = new T (). bir dəlil tam sinif və ya mücərrəd, və ya hətta interface qəbul olub əvvəlcədən bilmirəm, çünki bu, göz qabağındadır. Eyni Diziler yaratmaq üçün gedir.

məhdud növləri

Bu ümumi sinif Java bir arqument kimi qəbul edilə bilər növlərinin siyahısını məhdudlaşdırmaq lazım olduqda tez-tez hallar var. Bizim sinif Pair biz onlara daha riyazi əməliyyatları üçün yalnız ədədi dəyərlər içine istəyirəm ki, fərz edək. Bunu etmək üçün biz parametr növü yuxarı həddi müəyyən etmək lazımdır. Bu bucaq mötərizədə qəbul bütün dəlilləri irsi bir superclass reklam vasitəsilə həyata keçirilir. Bu aşağıdakı kimi görünür: class Pair . Bu şəkildə, compiler hesab edir ki, parametr T əvəz və ya sayı sinif və ya onun subclasses biri ola bilər əvəzinə.

Bu ümumi qəbul edir. Belə məhdudiyyətlər tez-tez bir və eyni sinifdə uyğunluğu növü parametrləri təmin etmək üçün istifadə olunur. Bizim sinif Pair nümunə düşünün: class Pair . Burada növü T ixtiyari ola bilər compiler demək, və V növü T növü və ya onun subclasses biri olmalıdır.

"Alt" məhdudlaşdırılması eyni yoldur, lakin əvəzinə sözü söz super sehr uzanır. Bu təsnif sinif Pair əvəzinə T bir ArrayList və ya vərəsəlik hər hansı bir sinif və ya interface və ya əvəz edilə bilər ki, deyir.

Generic Java üsulları və inşaatçılar

Java, ümumiləşdirmələr də üsulları yalnız dərsləri üçün müraciət, lakin bilər. Məsələn, ümumi üsul müntəzəm sinif elan edilə bilər.

Yuxarıdakı rəqəm göründüyü kimi, reklam ümumiləşdirilmiş üsul heç bir böyük şey deyil. bir üsul qaytarılması növü bucaq mötərizədə qoymaq və onlara növü parametrləri müəyyən etmək üçün əvvəl kifayət qədər.

hər şey konstruktor eyni edilir, əgər:

Bu halda Angle mötərizədə o, heç bir qaytarılması dəyəri var, çünki, dizayner adı qarşısında qoydu. həm proqramların nəticə olacaq:

tam

sim

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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