KomputilojProgramado

Java Generics: priskribo kaj metodoj

Komencante kun la apero de la lingvo Java spertis multajn ŝanĝojn, kiuj sendube alportis pozitivan momentojn en lia funcionalidad. Unu el tiuj gravaj ŝanĝoj estas la enkonduko de Java Generic aŭ ĝeneraligoj. Ĉi tiu funcionalidad ne nur faros la lingvon pli fleksebla kaj versátiles, sed ankaŭ multe pli sekura laŭ alportante la datumoj tipoj.

La fakto estas ke antaŭ la enkonduko de genéricos en Java genérico kodo povus esti kreita, ne nur en terminoj de tipo referenco Objekto. Tiaj ligoj povas atribui ajnan celon. Ja klasoj en Java estas implicita Objekto klaso heredantoj. Tamen, ĉi tiu alproksimiĝo estas potenciala fonto de multaj eraroj rilataj al sekureco tipoj en la ŝajna konvertiĝo de objekto de la Objekto al la celo tipo. Kiam uzanta ĝeneraligoj ĉiuj muldilojn Plenumataj implice kaj aŭtomate, forigante eĉ la potencialo por eraroj.

Java Generics: priskribo kaj ekzemplo

Ni konsciu bone simpla ekzemplo de la apliko de ĝeneraligo al regulaj klasoj en la figuro malsupre. Kaj tiam procedi al detalan ekzamenon de ĉiuj subtilecoj kaj nuancoj de Java Ĝenerala.

Atentu la vojon en kiu la klaso deklaro okazas Duo. Tuj post la klaso nomo, malferma angulo krampoj, kio indikis la letero T. Ĝi estas speco de kompletigo, kiu estas en la procezo de kreado de petskribo de ĉi tiu klaso estos anstataŭita de specifa tipo. Aspektas tiel: Paro obj = nova Paro (). Estas notinde ke anstataŭ T povas specifi ajnan literon, sed, kiel regulo, uzu T, V aŭ E.

Notu: ekde la oka versio de la Java, specifante la celo tipo al la deklari referenco angulo krampoj en la constructor povas resti malplenaj. Do ekzemple povas esti reskribita kiel supre: Paro obj = nova Paro <> ().

Kiam klaso estas deklarita tiel, tiam en lia korpo anstataŭ specifaj specoj de kampoj, ligoj, objektoj revenis de la metodoj vi povas uzi tiun leteron. Ekde T al la krei la klaso objekto estas anstataŭita de aparta tipo, unua kaj dua kampoj en ĉi tiu kazo estos de la tipo Integer.

Sekvante la logiko de la argumentoj kaj firstItem secondItem, aludis la taŭga konstruilo devas ankaŭ esti de tipo Integer aŭ subklaso. Se vi provos transdoni datumtipo kiu estas malsamaj de kio estis precizigita kiam kreante objekton, la tradukilo ne lasu tiun eraron. Tiel, la argumentoj konstruilo kiam celo estos tiel: Paro obj = nova Paro <> (nova Integer (1), novaj Integer (2)). La sama validas por la argumentoj kaj metodoj setFirst setSecond. Kaj kiel vi jam verŝajne konjektis, metodoj getFirst getSecond kaj revenos valoron de tipo Integer.

Ĝeneraligita kun pluraj parametroj klaso tipoj

En ĝeneraligita klasoj povas ankaŭ deklaras multoblajn parametrojn de la tipo kiu estas en angulo krampoj per komo. Rediseñado por kazo Paro klaso estas prezentita sube.

Kiel vi povas vidi, kiam vi kreas petskribo de ĉi tiu klaso en angulo krampoj devus indiki la sama nombro de tipoj kiel parametroj. Se vi konas tiun tipon de datumoj strukturo kiel Mapo, vi povas vidi ke ĝi uzas ĝuste la sama principo. Tie, la unua argumento specifas la tipon de ŝlosilo, kaj la dua - la tipo de valoro. Ni notu, ke la specoj de transdonitaj kiam celo argumentoj eble koincidas. Ekzemple, la sekva anonco Paro klaso ekzemple estas absolute korekta: Paro obj.

Iuj trajtoj de ĝeneraligoj

Antaŭ iri pli for, ni notu, ke la Java-tradukilo ne kreas malsamajn versiojn de la klaso Duo. Fakte, en la procezo de kompili ĝeneraligita tipon ĉiuj informoj estas forigita. Anstataŭe, vi venigu la konvenan tipoj, krei specialan version de la Dueto klaso. Tamen, en la programo estas ankoraŭ nur genérico versio de la klaso. Tiu procezo estas nomita en Java Generic purigado tipo.

Notu grava punkto. Ligiloj al malsamaj versioj de la sama java genérico klaso ne povas atentigi al unu kaj la sama objekto. Tio estas, supozu ni havas du ligiloj: Paro obj1 kaj Paro obj2. Sekve, konforme obj1 = obj2 eraro. Kvankam ambaŭ variabloj de tipo Paro , la celoj por kiuj ili rilatas, estas malsamaj. Tiu estas perfekta ekzemplo de la specoj de sekureco en Java Ĝenerala.

Restriktoj sur generic klasoj

Gravas scii, ke ĝeneraligoj povas esti aplikita nur al referenco tipoj, tio estas pasi parametrojn genérico klaso java argumento devas esti klaso tipo. Ĉi tiuj simplaj tipoj, kiel ekzemple, ekz-e, duobla aŭ longa, ne povas esti transdonita. Alivorte, la sekva linio Paro klaso deklaro ne estas permesita: Paro obj. Tamen, ĉi tiu limigo ne estas grava problemo, ĉar ekzistas responda Java ŝela klaso por ĉiu primitiva tipo. Efektive, se la klaso Paro vi volas encapsular entjero kaj Bulea valoro avtoupakovka faras ĉion por vi: Paro obj = nova Paro <> (25, vera).

Alia grava limigo estas la nekapablo krei petskribo de la parametro speco. Ekzemple, la sekva linio kaŭzos kompilo eraro: T unua = nova T (). Tio estas evidenta, ĉar vi ne scias anticipe ĉu argumento pasis plena klaso aŭ abstrakta, aŭ eĉ interfaco. La sama iras por krei arrays.

limigita tipoj

Sufiĉe ofte ekzistas situacioj kiam estas necese limigi la listo de tipoj kiu povas pasis kiel argumento por Java genérico klaso. Ni supozu, ke en nia klaso Paro ni volas encapsular nur la nombrajn valorojn por plua matematikaj operacioj sur ili. Por fari tion ni devas difini la supra limo de la parametro speco. Estas realigita per superclase anoncoj heredis ĉiujn argumentojn pasis en angulo krampoj. Ĝi aspektos tiel: klaso Paro . En ĉi tiu maniero, la tradukilo trovas ke anstataŭ la parametro T povas esti anstataŭigita aŭ Nombro klaso aŭ unu el liaj subklasoj.

Tiu estas komuna akcepto. Tiaj limigoj estas ofte uzata kiel kongruo tipo parametroj en unu kaj la sama klaso. Konsideru la ekzemplon en nia klaso Paro: klaso Paro . Ĉi tie ni diros al la tradukilo, ke la tipo T povas esti arbitra, kaj V tipo devas esti aŭ T tipo aŭ unu el liaj subklasoj.

Limigante la "fundo" estas precize la sama maniero, sed anstataŭ la vorto etendiĝas literumi la vorton super. Tio estas klasifikita klaso Paro diras ke anstataŭ T povas esti anstataŭigita aŭ ArrayList, aŭ iu ajn klaso aŭ interfaco kiu heredas.

Generic Java metodoj kaj constructores

En Java, ĝeneraligoj povas esti aplikita ne nur al la klasoj, sed ankaŭ metodoj. Ekzemple, ĝenerala metodo eblas deklarita en regula klasĉambro.

Kiel vidita en la figuro pli supre, la anoncon ĝeneraligita metodo estas ne granda interkonsento. Sufiĉe antaŭ la reveno tipo de metodo por meti la angulo krampoj kaj specifi la tipon parametroj en ili.

Se ĉio estas farita simile al la constructor:

Angulo krampoj en ĉi tiu kazo metas antaŭ la nomo de la reĝisoro, ĉar li ne havas reveno valoro. La rezulto de ambaŭ programoj estos:

entjera

ĉeno

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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