ComputereProgrammering

Java Generics: beskrivelse og metoder

Startende med udseendet af Java-sproget har gennemgået en masse ændringer, som utvivlsomt bragt positive øjeblikke i sin funktionalitet. En af disse væsentlige ændringer er indførelsen af Java Generisk eller generaliseringer. Denne funktionalitet ikke kun gøre sproget mere fleksible og alsidige, men også meget sikrere i form af at bringe de datatyper.

Faktum er, at forud for indførelsen af generiske lægemidler i Java generiske kode kunne skabes, ikke blot med hensyn til typebetegnelse Objekt. Sådanne links kan tildeles ethvert objekt. Efter alt, klasser i Java er implicitte Objekt klasse arvinger. Men denne tilgang er en potentiel kilde til mange fejl i forbindelse med sikkerhed typer i den tilsyneladende omdannelse af et objekt fra objektet til måltypen. Ved brug af generaliseringer udføres alle afstøbninger implicit og automatisk, hvilket eliminerer endda muligheden for fejl.

Java Generics: beskrivelse og eksempel

Lad os betragte et simpelt eksempel på anvendelsen af generalisering til almindelige klasser i nedenstående figur. Og derefter gå videre til en detaljeret undersøgelse af alle de finesser og nuancer i Java Generisk.

Vær opmærksom på den måde, som klassen erklæringen sker Pair. Umiddelbart efter navnet klasse, åbne vinkelparenteser, hvilket indikerede bogstavet T. Det er en slags fyldstof, som er i færd med at skabe en instans af denne klasse vil blive erstattet af en bestemt type. Det ser ud som følger: Par obj = new Pair (). Det skal bemærkes, at i stedet for T kan angive en hvilken som helst bogstav, men som regel skal du bruge T, V eller E.

Bemærk: startende med den ottende udgave af Java, som lægemidlet type, når erklære henvisning vinkelbeslag i konstruktøren kan efterlades tomt. Så eksempel kan omskrives som ovenfor: Par obj = new Pair <> ().

Når en klasse er erklæret på en sådan måde, så i hans krop i stedet for specifikke typer af felter, links, objekter returneres af de metoder, du kan bruge det bogstav. Idet T ved oprettelse klassen objekt er erstattet af en bestemt type, første og andet felter i dette tilfælde vil være af typen Integer.

Efter logikken i de argumenter og firstItem secondItem, henvises til det kompetente konstruktør skal også være af typen Heltal eller underklasse. Hvis du forsøger at sende en datatype, der er forskellig fra det, der blev angivet ved oprettelse et objekt, vil compileren ikke lade denne fejltagelse. Således argumenter konstruktøren, når et objekt vil være som følger: Et par obj = new Pair <> (ny Integer (1), nye Integer (2)). Det samme gælder for de argumenter og metoder setFirst setSecond. Og som du nok har gættet, metoder getFirst getSecond og vil returnere en værdi af typen Heltal.

Generaliseret med flere parametre klasse typer

I generelle klasser kan også erklære flere parametre af typen, der er angivet i vinkelbeslag med et komma. Redesignet af en sag Pair klasse er præsenteret nedenfor.

Som du kan se, når du opretter en instans af denne klasse i vinkelparenteser bør angive det samme antal typer som parametre. Hvis du er fortrolig med denne type data struktur som et kort, kan du se, at det bruger nøjagtig det samme princip. Der, det første argument angiver den type nøgle, og den anden - den type værdi. Det skal bemærkes, at de typer overføres, når et objekt argumenter kan overlappe. For eksempel følgende annonce Pair klasse instans er helt korrekt: Par obj.

Nogle funktioner i generaliseringer

Inden vi går videre, skal det bemærkes, at Java-oversætteren ikke skaber forskellige versioner af klassen Pair. I virkeligheden, i færd med at udarbejde en generaliseret form alle oplysningerne slettes. I stedet kan du bringe de relevante typer, hvilket skaber en særlig version af Pair klasse. Men i programmet er der stadig kun en generisk version af klassen. Denne proces kaldes i Java Generisk rengøring type.

Bemærk et vigtigt punkt. Links til forskellige versioner af den samme java generiske klasse kan ikke pege på én og samme objekt. Det vil sige, formoder vi har to links: Pair obj1 og Pair obj2. Følgelig i overensstemmelse obj1 = obj2 en fejl. Selv om begge variabler er af typen Pair , de objekter, som de vedrører, er forskellige. Dette er et glimrende eksempel på de typer af sikkerhed i Java Generisk.

Restriktioner for generiske klasser

Det er vigtigt at vide, at generaliseringer kan kun anvendes til at henvise til typer, der er til at videregive parametre generiske klasse java argument skal være en klasse type. Disse enkle typer, såsom f.eks, dobbelt- eller lange, kan ikke overføres. Med andre ord, er følgende linje Pair klasse erklæring ikke tilladt: Par obj. Men denne begrænsning ikke er et alvorligt problem, da der er en tilsvarende Java wrapper klasse for hver primitiv type. Strengt taget, hvis klassen Pair du ønsker at indkapsle et heltal og booleske værdi avtoupakovka gør alt for dig: Par obj = new Pair <> (25, sandt).

En anden alvorlig begrænsning er den manglende evne til at oprette en forekomst af parameteren type. For eksempel vil følgende linje forårsage en kompileringsfejl: T først = nye T (). Det er indlysende, fordi du ikke ved på forhånd, om et argument bestået en fuld klasse eller abstrakt, eller endda grænseflade. Det samme gælder for at skabe arrays.

begrænsede typer

Ganske ofte er der situationer, hvor det er nødvendigt at begrænse listen af typer, der kan overføres som et argument til Java generiske klasse. Lad os antage, at vi i vores klasse Pair ønsker at indkapsle kun de numeriske værdier for yderligere matematiske operationer på dem. For at gøre dette har vi brug for at definere den øvre grænse for parameteren type. Det realiseres ved hjælp af en superklasse annoncer arvet alle de argumenter bestået i vinkelbeslag. Det vil se ud som følger: klasse Pair . På denne måde compileren konstaterer, at i stedet for parameteren T kan være substitueret eller Nummer klasse eller en af dens underklasser.

Dette er en fælles reception. Sådanne restriktioner er ofte bruges til at give kompatibilitet typen parametre i en og samme klasse. Betragt eksemplet i vores klasse Pair: klasse Par . Her fortæller vi compileren at typen T kan være vilkårlig, og V type skal være enten T-typen eller en af dens underklasser.

Begrænsning af "bunden" er præcis på samme måde, men i stedet for ordet strækker sig til stave ordet super. Det er klassificeret klasse Pair siger, at i stedet for T kan substitueres eller en ArrayList, eller en hvilken som helst klasse eller grænseflade, som den arver.

Generiske Java metoder og konstruktører

I Java kan generaliseringer anvendes ikke blot til klasserne, men også metoder. For eksempel kan en generisk metode erklæres i en almindelig klasseundervisning.

Som det fremgår af ovenstående figur, annoncen generaliseret metode er nogen big deal. Nok før returnering type en metode til at sætte vinkelbeslag og angive den type parametre i dem.

Hvis alt er gjort på samme måde som konstruktør:

Vinkelbeslag i dette tilfælde forelagt navnet på designeren, fordi han ikke har nogen returværdi. Resultatet af begge programmer vil være:

Integer

String

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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