Datorer, Programmering
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
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
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
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
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
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
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
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
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
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