DatorerProgrammering

Java Generics: beskrivning och metoder

Från och med utseendet på Java har genomgått en hel del förändringar, som utan tvekan fört positiva stunder i sin funktionalitet. En av dessa väsentliga förändringar är införandet av Java Generic eller generaliseringar. Denna funktion inte bara göra språket mer flexibel och mångsidig, men också mycket säkrare när det gäller att föra datatyperna.

Faktum är att före införandet av generika i Java generisk kod skulle kunna skapas, inte bara när det gäller typ referensobjekt. Sådana länkar kan tilldelas något föremål. När allt kommer omkring, klasser i Java är implicita Object klass arvingar. Dock är detta tillvägagångssätt en potentiell källa till många fel i samband med säkerhetstyper i den skenbara omvandlingen av ett objekt från objekt till måltypen. Vid användning av generaliseringar alla kastar utförs implicit och automatiskt, vilket eliminerar även risken för fel.

Java Generics: beskrivning och exempel

Låt oss betrakta ett enkelt exempel på tillämpningen av generalisering till vanliga klasser i figuren nedan. Och sedan vidare till en detaljerad undersökning av alla nyanser och nyanser av Java Generic.

Var uppmärksam på det sätt på vilket klassdeklarationen sker Pair. Omedelbart efter klassnamnet, öppna vinkelfästen, som indikerade bokstaven T. Det är en typ av fyllmedel, som är i processen för att skapa en instans av denna klass kommer att ersättas av en specifik typ. Det ser ut som följer: Pair obj = new Pair (). Det bör noteras att i stället för T kan ange en bokstav, men som regel, använd T, V eller E.

Notera: med början med den åttonde versionen av Java, specificera typ målet när förklara referensvinkelfästen i konstruktören kan lämnas tomma. Så exempelvis kan skrivas om som ovan: Pair obj = new Pair <> ().

När en klass deklareras på ett sådant sätt, då i hans kropp i stället för specifika typer av fält, länkar, objekt som returneras av de metoder du kan använda den bokstaven. Eftersom T när du skapar klassobjektet är ersatt av en viss typ, första och andra fält i detta fall kommer att vara av typen Heltal.

Efter logiken i argument och firstItem secondItem, hänvisas till behörigt konstruktören måste också vara av typen Integer eller underklass. Om du försöker överföra en datatyp som skiljer sig från vad som anges när du skapar ett objekt, kommer kompilatorn inte låta detta misstag. Således argument konstruktören när ett föremål kommer att vara följande: Pair obj = new Pair <> (nytt Integer (1), nytt Integer (2)). Detsamma gäller för de argument och metoder setFirst setSecond. Och som du har förmodligen gissat, metoder getFirst getSecond och kommer att återvända till ett värde av typen Integer.

Generaliserat med flera parametrar klasstyper

I generella klasser kan också förklara flera parametrar av den typ som är inställda i vinkelparenteser med kommatecken. Ombyggd av ett fall Pair klass presenteras nedan.

Som ni kan se, när du skapar en instans av den här klassen i vinkeljärnen skall ange samma antal typer som parametrar. Om du är bekant med denna typ av datastruktur som en karta, kan du se att den använder exakt samma princip. Där anger vilken typ av nyckel, och den andra det första argumentet - typ av värde. Det bör noteras att de typer av överförd när ett objekt argument kan överlappa varandra. Till exempel, är följande annons Pair klassinstans helt korrekt: Pair obj.

Vissa funktioner i generaliseringar

Innan vi går vidare, bör det noteras att Java-kompilatorn inte skapar olika versioner av klassen Pair. I själva verket, i färd med att sammanställa en generaliserad typ all information raderas. Istället du tar lämpliga typer, vilket skapar en specialversion av Pair klassen. Men i programmet finns det fortfarande bara en generisk version av klassen. Denna process kallas i Java Generic rengöring typ.

Notera en viktig punkt. Länkar till olika versioner av samma java generiska klassen kan inte peka på ett och samma objekt. Det vill säga, antar att vi har två länkar: Pair obj1 och Pair Obj2. Följaktligen, i linje obj1 = Obj2 ett fel. Även om båda variabler är av typen Pair de objekt som de hänför sig, är olika. Detta är ett utmärkt exempel på den typ av säkerhet i Java Generic.

Restriktioner för generiska klasser

Det är viktigt att veta att generaliseringar kan endast tillämpas på referenstyper, det vill skicka parametrar generisk klass java argument måste vara en typ klass. Dessa enkla typer, såsom, t ex, dubbla eller långa, kan inte överföras. Med andra ord, är följande rad Pair klassdeklarationen inte tillåtna: Pair obj. Dock är denna begränsning inte är ett allvarligt problem, eftersom det finns en motsvarande Java wrapper klass för varje primitiv typ. Strängt taget, om klassen Pair du vill kapsla in ett heltal och booleskt värde avtoupakovka gör allt för dig: Pair obj = new Pair <> (25, true).

En annan allvarlig begränsning är oförmågan att skapa en instans av typen parameter. Till exempel, kommer den följande rad orsaka en sammanställning fel: T först = nya T (). Detta är uppenbart, eftersom du inte vet i förväg om ett argument passerade en hel klass eller abstrakt, eller ens gränssnitt. Detsamma gäller för att skapa matriser.

begränsade typer

Ofta finns det situationer då det är nödvändigt att begränsa listan över typer som kan skickas som ett argument till Java generisk klass. Låt oss anta att vi i vår klass Par vill kapsla bara de numeriska värdena för ytterligare matematiska operationer på dem. För att göra detta måste vi definiera den övre gränsen av typen parameter. Det realiseras med hjälp av en super annonser ärvt alla argument som skickas i vinkeljärnen. Det kommer att se ut så här: klass Pair . På detta sätt, finner kompilatorn att i stället för parametern T kan vara substituerad eller Antal klass eller en av dess underklasser.

Detta är en vanlig mottagning. Sådana begränsningar används ofta för att ge typ kompatibilitet parametrar i en och samma klass. Betrakta exemplet i vår klass Pair: class Pair . Här berättar vi kompilatorn att typen T kan vara godtyckliga och V Typen måste vara antingen T-typ eller en av dess underklasser.

Begränsning av "botten" är exakt samma sätt, men i stället för ordet sträcker sig stava ordet super. Det är klassificerat klass Pair säger att istället för T ersättas eller en Arraylist, eller någon klass eller gränssnitt som den ärver.

Generiska Java metoder och konstruktörer

I Java kan generaliseringar tillämpas inte bara klasserna, men också metoder. Till exempel kan en generisk metod förklaras i en vanlig klass.

Som framgår av bilden ovan, är annonsen generaliserad metod no big deal. Nog innan retur typ av metod för att sätta vinkeljärnen och ange parametrar typ i dem.

Om allt görs på samma sätt som konstruktorn:

Vinkelfästen i detta fall sätta före namnet på formgivaren, eftersom han inte har någon returvärde. Resultatet av båda programmen kommer att vara:

heltal

String

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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