Java Generics on yksi Jaavan kielen tärkeimmistä piirteistä. Ajatus geneeristen on melko yksinkertainen, mutta se joskus irtoaa monimutkaisena, koska siirtyminen tavanomaisesta syntaksista liittyy siihen.
tämän opetusohjelman tarkoituksena on esitellä sinulle tämä hyödyllinen generiikan käsite helposti ymmärrettävällä tavalla.
mutta ennen kuin sukelletaan itse geneerisiin, selvitetään, miksi Java generics ylipäätään tarvittiin.,
Tarkoitus Java Generics
Ennen käyttöönottoa geneeristen Java 5, voit kirjoittaa ja kääntää koodin pätkä näin ilman heittää virhe tai varoitus:
Voit lisätä arvoja tahansa luetteloon tai muun Java-Kokoelma tarvitsematta ilmoittaa, minkä tyyppistä tietoa se tallentaa. Mutta kun noudat arvot listalta, sinun täytyy nimenomaisesti heittää se tiettyyn tyyppiin.
harkitse iterointia yllä olevan listan kautta.,
Salli luoda luettelon ensin julistaa tallennettujen tietojen tyyppi, kuten me teimme, voi johtaa ohjelmoijat tekevät virheitä, kuten edellä joka heittää ClassCastExceptions
aikana runtime.
Geneeristen otettiin käyttöön estämään ohjelmoijat tehdä tällaisia virheitä.
Kanssa generics, voit selvästi julistaa tietojen tyyppi, jotka on aiotaan varastoida kun luot Java-Kokoelma, kuten seuraava esimerkki osoittaa.,
Nyt, et voi vahingossa tallentaa Kokonaisluku Merkkijono tyyppi-luettelosta ilman heittää käännettäessä virhe. Tämä varmistaa, että ohjelma ei törmää ajonaikaisiin virheisiin.
päätarkoituksena käyttöönoton geneeristen Java oli välttää ajautumassa ClassCastExceptions
suorituksen aikana.
Java Genericsin luominen
voit käyttää genericsia Java-luokkien ja-menetelmien luomiseen., Katsotaanpa esimerkkejä siitä, miten luoda generics kunkin tyypin.
Geneerinen Luokka
Kun luot geneerinen luokka, tyyppi parametri luokka on lisätty lopussa luokan nimi sisällä kulma <>
suluissa.
Täältä T
is the data type-parametri. T
, N
ja E
muutamia kirjeitä, joita on käytetty tietojen tyyppi parametrien mukaan Java-yleissopimukset.,
yllä olevassa esimerkissä voit välittää sille tietyn tietotyypin GenericClass-objektia luotaessa.
primitiivistä datatyyppiä ei voi siirtää datatyypin parametrille, kun luodaan geneeristä luokkaobjektia. Vain Datatyypit, jotka laajentavat objektityyppiä, voidaan siirtää tyyppiparametreiksi.
esimerkiksi:
Geneeristen Menetelmiä
Luodaan yleisiä menetelmiä seuraa samanlainen kuvio voidaan luoda geneerisiä luokkia. Voit toteuttaa geneerisen menetelmän geneerisen luokan sisällä sekä ei-geneerisen menetelmän.,
tässä, voit siirtää joukon tietyn tyypin parametrisoida menetelmän. Yleinen menetelmä PrintItems()
käy läpi kulunut array ja tulostaa tallennettuja aivan kuten normaali Java-menetelmä.
, joka Rajoittuu Tyyppi Parametrit
toistaiseksi, yleinen luokat ja menetelmät olemme luoneet edellä voi olla parametroituja mitään tietoja, kirjoita muut kuin alkukantaiset tyypit. Mutta entä jos haluaisimme rajoittaa yleistietoihin siirrettäviä tietotyyppejä? Tässä tulevat rajatut tyyppiparametrit.,
voit sitoa yleisluokalla tai-menetelmällä hyväksytyt tietotyypit täsmentämällä, että niiden pitäisi olla toisen tietotyypin alaluokka.
esimerkiksi:
Tässä UpperBoundedClass
ja UpperBoundedMethod
voi vain olla parametroituja käyttäen alatyyppejä List
tietotyyppi.
List
tiedot tyyppi toimii yläraja tyyppi parametri. Jos yrität käyttää tietojen tyyppi, joka ei ole alatyyppi List
, se heittää käännettäessä virhe.
rajat eivät rajoitu vain luokkiin., Voit myös siirtää rajapintoja. Rajapinnan laajentaminen tarkoittaa tässä tapauksessa rajapinnan toteuttamista.
parametrilla voi olla myös useita rajoja, kuten tämä esimerkki osoittaa.
hyväksyvän tietotyypin on oltava sekä eläin-että nisäkäsluokan alaluokka. Jos jokin näistä rajoista on luokka, sen on oltava sidotussa julistuksessa etusijalla.
yllä olevassa esimerkissä, jos nisäkäs on luokka ja eläin on rajapinta, nisäkkään on oltava edellä esitetyllä tavalla ensimmäinen. Muuten koodi heittää kääntöaikavirheen.,
Java Generics Yleismerkkejä
Yleismerkkejä käytetään välittää parametrit generic tyypit menetelmiä. Toisin kuin yleinen menetelmä, täällä, yleinen parametri välitetään parametrit hyväksytty menetelmä, joka on eri tietotyyppi parametri keskustelimme yllä. Jokerikorttia edustaa ? symboli.
edellä printItems()
menetelmä hyväksyy luettelot kaikki tiedot tyyppi parametri. Tämä estää ohjelmoijia toistamasta koodeja eri tietotyyppien luetteloihin, mikä tapahtuisi ilman yleistyksiä.,
Upper Bounded Yleismerkkejä
Jos haluamme rajoittaa tietotyypit tallennetaan luetteloon hyväksytty menetelmä, voimme käyttää rajoittuu yleismerkkejä.
Esimerkki:
printSubTypes()
menetelmä hyväksyy vain luettelot, jotka tallentavat alatyyppejä Väri. Se hyväksyy listan RedColor-tai BlueColor-kohteista, mutta ei hyväksy luetteloa Eläinkohteista. Tämä johtuu siitä, että eläin ei ole värin alatyyppi. Tämä on esimerkki ylä-rajoittuu jokeri.,
Pienempi Rajoittuu Yleismerkkejä
Vastaavasti, jos meillä oli:
sitten printSuperTypes()
menetelmä hyväksyy vain luetellaan, että store super tyyppisiä Koiran luokassa. Se hyväksyisi Listan nisäkäs-tai Eläinesineistä, mutta ei listaa Laboratoriokohteista, koska LabDog ei ole koiran superluokka, vaan alaluokka. Tämä on esimerkki matalammasta jokerikortista.
Johtopäätös
Java Generics on tullut ominaisuus, että ohjelmoijat eivät voi elää ilman, koska sen käyttöönottoa.
suosio johtuu sen vaikutuksesta ohjelmoijien elämän helpottumiseen., Sen lisäksi, että geneeristen lääkkeiden käyttö estää niitä tekemästä koodausvirheitä, se tekee koodista vähemmän toistuvan. Huomasitko, miten se yleistää luokkia ja menetelmiä, jotta eri tietotyypeille ei tarvitsisi toistaa koodia?
hyvä käsitys geneerisistä aineista on tärkeää tulla kielen asiantuntijaksi. Joten, soveltamalla mitä opit tässä opetusohjelma käytännön koodi on tapa mennä eteenpäin nyt.