Video: Android 101 by Fred Widjaja 2024
Unul dintre scopurile originale de proiectare pentru Java a fost păstrarea limbii cât mai simplă posibil. Dezvoltatorul limbii a luat câteva caracteristici inutile de C ++ și le-a aruncat pe fereastră. Rezultatul a fost un limbaj elegant și elegant. Unii oameni au spus că limba era prea elegantă.
Deci, după câțiva ani de discuții și încurcări, Java a devenit un pic mai complicat. Până în anul 2004, Java avea tipuri de enum, îmbunătățite pentru bucle, import static și alte caracteristici interesante noi. Dar cea mai discutată caracteristică nouă a fost introducerea de medicamente generice.
ArrayList people = nou ArrayList ();
Utilizarea a ceva de genul a fost nou în Java 5. 0. În Java vechi, ați scrie
ArrayList people = new ArrayList ();
În acele zile, un ArrayList putea stoca aproape orice ai vrut să pui în el - un număr, un Cont, o Cameră, un String … orice. Clasa ArrayList a fost foarte versatilă, dar cu această versatilitate au apărut câteva dureri de cap. Dacă ați putea pune ceva într-un ArrayList, nu puteați să previzionați cu ușurință ce veți obține dintr-un ArrayList.
În particular, nu ați putut scrie cu ușurință un cod care presupunea că ați stocat anumite tipuri de valori în ArrayList. Iată un exemplu:
ArrayList things = new ArrayList (); lucruri. adăugați (cont nou ()); Contul myAccount = lucruri. obține (0); // NU UTILIZATI ACEASTA. Este un cod prost.
În a treia linie, apelul pentru a obține (0) ia cea mai mică valoare din colecția de lucruri. Apelul de a obține (0) este în regulă, dar compilatorul se încurcă în încercarea de alocare contului myAccount. Vei primi un mesaj pe a treia linie spunând că orice ai obține de pe lista de lucruri nu poate fi umplut în variabila myAccount.
Obțineți acest mesaj deoarece, până când compilatorul atinge a treia linie, a uitat că elementul adăugat pe al doilea rând a fost de tip Account!
Introducerea genericelor remediază această problemă:
ArrayList things = new ArrayList (); lucruri. adăugați (cont nou ()); Contul myAccount = lucruri. obține (0); // Utilizați acest cod în loc. Este un cod bun.
Adăugarea în două locuri indică compilatorului că lucrurile stochează Cazurile contului - nimic altceva. Deci, în a treia linie din codul precedent, obțineți o valoare din colecția de lucruri. Apoi, deoarece lucrurile stochează numai obiecte Cont, puteți să-mi faceți contul MyAccount la acea valoare nouă.
Java 5. 0 a adăugat generice în Java. Dar la scurt timp după nașterea lui Java 5. 0, programatorii au observat cât de stricat poate fi codul generic.La urma urmei, puteți crea generice în generice. Un ArrayList poate conține o grămadă de rețele, fiecare dintre ele putând fi un ArrayList. Deci, puteți scrie
ArrayListmess = ArrayList nou ();
Toată repetarea în declarația de mizerie dă programatorilor o durere de cap! Pentru a evita această urâțenie, versiunile Java 7 și versiunile ulterioare au un operator diamant , . Operatorul de diamante îi spune lui Java să refolosească chestiile complicate în mod obișnuit pe care le-ați pus în partea anterioară a declarației generice.
În acest exemplu, spune Java să reutilizeze
ArrayListmess = new ArrayList ();
În Java 7 și mai târziu, puteți scrie oricare dintre aceste declarații de mizerie - declarația originală, urâtă cu două apariții de ArrayList [], sau o declarație raționalizată (doar ușor urâtă) cu operatorul de diamante și numai cu un ArrayList [] apariție.
Da, codul simplificat este încă complicat. Dar fără toate repetările ArrayList [], codul simplificat este mai puțin greoi. Operatorul de diamante Java 7 ia o singură șansă să copiați ceva incorect și să aveți o eroare mare în codul dvs.