Datamaskiner, Programmering
Java Generics: beskrivelse og metoder
Fra og med utseendet på Java-språket har gjennomgått en rekke endringer, som utvilsomt brakt positive øyeblikk i sin funksjonalitet. En av disse vesentlige endringer er innføring av Java Generic eller generaliseringer. Denne funksjonaliteten ikke bare gjøre språket mer fleksibel og allsidig, men også mye tryggere når det gjelder å bringe datatyper.
Faktum er at før innføringen av generika i Java generisk kode kunne opprettes, ikke bare i form av type referanseobjekt. Slike koblinger kan tildeles en gjenstand. Tross alt, klasser i Java er implisitte objektklasse arvinger. Imidlertid er denne tilnærmingen en potensiell kilde til mange feil relatert til sikkerhetstyper i den tilsynelatende omdannelsen av en gjenstand fra objektet til den måltype. Ved bruk av generaliseringer alle kaster utføres implisitt og automatisk, eliminerer også potensialet for feil.
Java Generics: beskrivelse og eksempel
La oss se på et enkelt eksempel på anvendelsen av generalisering til vanlige klasser i figuren nedenfor. Og så videre til en detaljert undersøkelse av alle nyansene av Java Generic.
Ta hensyn til hvordan klassen erklæringen oppstår Pair. Umiddelbart etter et klassenavn åpne vinkelbraketter, som indikerte bokstaven T. Det er en form av fyllstoff, som er i ferd med å opprette en instans av denne klasse vil bli erstattet av en bestemt type. Det ser ut som følger: Par
Merk: starter med den åttende versjonen av Java, angi målet type når erklære referansen vinkelparenteser i konstruktøren kan stå tomme. Så eksempel kan omskrives som ovenfor: Par
Når en klasse er erklært på en slik måte, så i kroppen hans i stedet for spesifikke typer felt, lenker, objekter returnert av metodene du kan bruke bokstaven. Siden T ved oppretting av den klasse objektet er erstattet av en bestemt type, første og andre felt i dette tilfellet vil være av typen heltall.
Etter logikken i argumentene og firstItem secondItem, referert til den aktuelle konstruktøren må også være av typen heltall eller underklasse. Hvis du prøver å overføre en datatype som er forskjellig fra det som ble angitt når du oppretter et objekt, vil kompilatoren ikke la dette feil. Således er argumenter konstruktør når et objekt vil være som følger: Par
Generalisert med flere parametere klassetyper
I generaliserte klasser kan også deklarere flere parametere av den type som er angitt i vinkelparenteser med et komma. Redesignet av en sak Pair klassen presenteres nedenfor.
Som du kan se, når du oppretter en forekomst av denne klassen i vinkelparenteser bør indikere like mange typer som parametre. Hvis du er kjent med denne typen datastruktur som et kart, kan du se at den bruker nøyaktig samme prinsipp. Det spesifiserer det første argumentet nøkkeltypen, og den andre - type verdi. Det bør bemerkes at de typene som overføres når et objekt argumenter kan overlappe. For eksempel er den følgende ad Pair klasse eksempel absolutt korrekt: Par
Noen funksjoner i generaliseringer
Før du går videre, bør det bemerkes at Java kompilatoren ikke lage ulike versjoner av klassen Pair. Faktisk, i ferd med å utarbeide en generalisert typen all informasjon blir slettet. I stedet, ta med deg de riktige typene, og skaper en spesiell versjon av Pair klassen. Men i programmet er det fortsatt bare en generisk versjon av klassen. Denne prosessen kalles i Java Generic rengjøring type.
Merk et viktig punkt. Lenker til ulike versjoner av samme java generisk klasse kan ikke peke på en og samme objekt. Det vil si, at vi har to linker: Par
Restriksjoner på generiske klasser
Det er viktig å vite at generaliseringer kan bare brukes til referansetyper, det vil sende parametre generisk klasse java argumentet må være et klasse type. Disse enkle typer, så som for eksempel, dobbel eller lange, kan ikke overføres. Med andre ord, er følgende linje Pair klassen erklæring ikke tillatt: Par
En annen alvorlig begrensning er den manglende evne til å opprette en forekomst av det parametertype. For eksempel vil følgende linje føre til en kompileringsfeil: T først = ny T (). Dette er opplagt, fordi du ikke vet på forhånd om et argument gått en hel klasse eller abstrakt, eller grensesnitt. Det samme gjelder for å lage arrays.
begrenset typer
Ganske ofte er det situasjoner når det er nødvendig å begrense listen over typer som kan sendes som et argument til Java generisk klasse. La oss anta at i vår klasse Pair vi ønsker å kapsle bare de tallverdier for videre matematiske operasjoner på dem. For å gjøre dette må vi definere den øvre grensen for parametertype. Det er realisert ved hjelp av en baseklasse annonser arvet alle de argumenter som sendes i vinkelparenteser. Det vil se ut som følger: class Par
Dette er en vanlig mottak. Slike restriksjoner er ofte anvendt for å tilveiebringe forenlighet typeparametere i en og samme klasse. Tenk for eksempel i vår klasse Pair: class Par
Begrense "bunnen" er akkurat på samme måte, men i stedet for ordet strekker seg å stave ordet super. Som er klassifisert klasse Par
Generiske Java metoder og konstruktører
I Java kan generaliseringer brukes ikke bare til klassene, men også metoder. For eksempel kan en generisk metode deklareres i et vanlig klasserom.
Som det fremgår av figuren ovenfor, er annonsen generalisert metode ingen big deal. Nok før returtypen av en metode for å sette vinkelbena og angir typeparametere i dem.
Hvis alt er gjort på samme måte som konstruktøren:
Vinkelparenteser i dette tilfellet satt foran navnet på designeren, fordi han ikke har noen returverdi. Resultatet av begge programmene vil være:
Integer
string
Similar articles
Trending Now