OrdinadorsProgramació

Els genèrics de Java: descripció i mètodes

A partir de l'aparició del llenguatge Java ha estat objecte d'una gran quantitat de canvis, el que sens dubte va portar moments positius en la seva funcionalitat. Un d'aquests canvis significatius és la introducció de Java genèrics o generalitzacions. Aquesta funcionalitat no només fan que el llenguatge més flexible i versàtil, però també molt més segur en termes de portar els tipus de dades.

El fet és que abans de la introducció dels genèrics en Java codi genèric es podrien crear, no només en termes d'objectes de referència de tipus. Aquests enllaços es poden assignar qualsevol objecte. Després de tot, les classes en Java són hereus classe d'objecte implícites. No obstant això, aquest enfocament és una font potencial de molts errors relacionats amb tipus de seguretat en l'aparent conversió d'un objecte des de l'objecte al tipus de destinació. Quan s'utilitza generalitzacions tots els motlles es realitzen de forma implícita i automàticament, eliminant fins i tot la possibilitat d'errors.

Els genèrics de Java: descripció i un exemple

Considerem un exemple senzill de l'aplicació de la generalització de les classes regulars en la següent figura. I després procedir a un examen detallat de totes les subtileses i matisos de Java genèric.

Fer atenció a la forma en què es produeix la declaració de classe Parell. Immediatament després el nom de classe, els suports d'angle obert, el que indica la lletra T. És un tipus de material de farciment, que està en el procés de creació d'una instància d'aquesta classe serà reemplaçat per un tipus específic. Es veu de la següent manera: Parell obj = new Parell (). Cal assenyalar que en lloc de T pot especificar qualsevol carta, però, per regla general, utilitzar T, V o E.

Nota: a partir de la vuitena versió de la Java, que especifica el tipus de destinació quan es declara parèntesis angulars de referència en el constructor es poden deixar buits. Així exemple es pot reescriure com a dalt: Parell obj = nou parell <> ().

Quan una classe es declara de tal manera, llavors en el seu cos en lloc de determinats tipus de camps, enllaços, objectes retornats pels mètodes que pot utilitzar aquesta lletra. Des T en crear l'objecte de classe se substitueix per un tipus particular, els camps primer i segon en aquest cas seran del tipus sencer.

Seguint la lògica dels arguments i firstItem secondItem, referit al constructor apropiat ha de ser també de tipus sencer o subclasse. Si intenta transmetre un tipus de dades que és diferent del que es va especificar en crear un objecte, el compilador no permetrà que aquest error. Per tant, els arguments constructor quan un objecte serà com segueix: Parell obj = nou parell <> (new Integer (1), new Integer (2)). El mateix s'aplica als arguments i mètodes setFirst setSecond. I com vostè probablement ha endevinat, mètodes GetFirst getSecond i retornarà un valor de tipus sencer.

Generalitzada amb els tipus de classes de diversos paràmetres

A les classes generalitzada també pot declarar múltiples paràmetres del tipus que es troba en claus angulars amb una coma. Redissenyat per un cas de classe Parell es presenta a continuació.

Com es pot veure, quan es crea una instància d'aquesta classe entre parèntesis angulars hauran d'indicar el mateix nombre de tipus com a paràmetres. Si està familiaritzat amb aquest tipus d'estructura de dades com un mapa, es pot veure que s'utilitza exactament el mateix principi. Allà, el primer argument especifica el tipus de clau, i el segon - el tipus de valor. Cal tenir en compte que els tipus d'arguments transmesa quan un objecte es poden solapar. Per exemple, la instància de classe Parell següent anunci és absolutament correcta: Parell obj.

Algunes característiques de les generalitzacions

Abans de seguir endavant, cal assenyalar que el compilador Java no crea diferents versions del parell de classes. De fet, en el procés de compilació d'un tipus generalitzat de tota la informació s'esborra. En el seu lloc, portar als tipus apropiats, la creació d'una versió especial de la classe Parell. No obstant això, al programa encara hi ha només una versió genèrica de la classe. Aquest procés es denomina en Java de neteja de tipus genèric.

Tingueu en compte un punt important. Enllaços a diferents versions de la mateixa classe genèrica Java no pot apuntar a un i el mateix objecte. És a dir, suposem que tenim dos enllaços: Parell obj1 i Par obj2. En conseqüència, en línia obj1 = obj2 un error. Encara que ambdues variables són de tipus Parell , els objectes als quals es refereixen, són diferents. Aquest és un bon exemple dels tipus de seguretat en Java genèric.

Les restriccions a les classes genèriques

És important saber que les generalitzacions poden ser aplicats només per fer referència a tipus, és a dir per passar paràmetres argument java classe genèrica ha de ser un tipus de classe. Aquests tipus simples, com ara, per exemple, dobles o llarg, no es poden transferir. En altres paraules, no es permet la declaració de classe Parell següent línia: Parell obj. No obstant això, aquesta limitació no és un problema greu, ja que hi ha una classe contenidora de Java corresponent per a cada tipus primitiu. En sentit estricte, si el parell classe que desitja encapsular un sencer i valor booleà avtoupakovka fa tot per vostè: Parell obj = new Parell <> (25, true).

Una altra seriosa limitació és la incapacitat per crear una instància del tipus de paràmetre. Per exemple, la següent línia causarà un error de compilació: T = new primera T (). Això és obvi, perquè no se sap per endavant si un argument passat a una classe completa o abstracta, o fins i tot interfície. El mateix val per a la creació de matrius.

tipus limitats

Molt sovint hi ha situacions en què cal limitar la llista de tipus que es poden passar com a argument per a Java classe genèrica. Suposem que a la nostra classe Parell volem encapsular només els valors numèrics per a altres operacions matemàtiques en ells. Per a això és necessari definir el límit superior del tipus de paràmetre. Es realitza per mitjà d'un anunci superclasse heretades tots els arguments que es passen entre claus angulars. Es veurà de la següent manera: Classe Parell . D'aquesta manera, el compilador troba que en lloc del paràmetre T pot estar substituït o classe Number o una de les seves subclasses.

Es tracta d'una recepció comuna. Tals restriccions s'utilitzen sovint per proporcionar paràmetres de tipus de compatibilitat en una i la mateixa classe. Penseu l'exemple de la nostra classe Parell: Parell de classe . Aquí li al compilador que el tipus T pot ser arbitrària, i el tipus V ha de ser de tipus T o una de les seves subclasses.

Limitant el "fons" és exactament la mateixa manera, però en lloc de la paraula s'estén a lletrejar la paraula súper. Aquesta classe es classifica Parell diu que en lloc de T pot estar substituït o ArrayList, o qualsevol classe o interfície que s'hereta.

els mètodes de Java genèrics i constructors

En Java, les generalitzacions poden aplicar-se no només a les classes, sinó també mètodes. Per exemple, un mètode genèric pot ser declarada en una classe regular.

Com es veu a la figura anterior, el mètode generalitzat d'anuncis no és gran cosa. Prou abans que el tipus de retorn d'un mètode per posar els parèntesis angulars i especificar els paràmetres de tipus en ells.

Si tot es fa de manera similar a l'constructor:

Els parèntesis angulars en aquest cas ja abans del nom del dissenyador, perquè no té valor de retorn. El resultat de tots dos programes serà:

sencer

cadena

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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