ComputersProgrammering

Java Generics: beschrijving en methoden

Te beginnen met de verschijning van de Java-taal heeft een hoop veranderingen, die ongetwijfeld positieve momenten bracht in zijn functionaliteit ondergaan. Eén van deze belangrijke veranderingen is de introductie van Java Generic of generalisaties. Deze functionaliteit niet alleen de taal meer flexibel en veelzijdig, maar ook veel veiliger in termen van het brengen van de soorten gegevens.

Het feit is dat vóór de invoering van generieke geneesmiddelen in Java generieke code kunnen worden gecreëerd, niet alleen in termen van de type-aanduiding Object. Dergelijke koppelingen kunnen elk object worden toegewezen. Immers, klassen in Java zijn impliciete klasse Object erfgenamen. Deze benadering is een mogelijke bron van veel fouten elementen met betrekking tot de veiligheid van de apparente omzetting van een object uit het object naar het doeltype. Bij het gebruik van generalisaties alle afgietsels worden impliciet en automatisch uitgevoerd, zelfs de kans op fouten te elimineren.

Java Generics: beschrijving en voorbeeld

Laten we eens een eenvoudig voorbeeld van de toepassing van generalisatie naar reguliere lessen in de afbeelding hieronder. En vervolgens overgaan tot een grondig onderzoek van alle subtiliteiten en nuances van Java Generic.

Besteed aandacht aan de manier waarop de klasse verklaring optreedt Pair. Direct na de klassenaam open hoeksteunen, waarbij de letter T. aangegeven is een soort vulstof, die in de werkwijze van een instantie van deze klasse wordt vervangen door een bepaald type. Het ziet er als volgt uit: Paar obj = new Pair (). Opgemerkt dient te worden dat in plaats van T elke letter kunt opgeven, maar in de regel, gebruik T, V of E.

Opmerking: beginnend met de achtste uitvoering van de Java vermelding van het doeltype bij het declareren referentiehoek haakjes in de constructor kan leeg worden gelaten. Zo kan bijvoorbeeld worden herschreven als hierboven: Paar obj = new Pair <> ().

Wanneer een klasse wordt verklaard op een zodanige wijze, dan in zijn lichaam in plaats van specifieke soorten gebieden, links, objecten geretourneerd door de methoden die u kunt die brief gebruiken. Aangezien T bij het maken van de objectklasse wordt vervangen door een bepaald type, eerste en tweede velden in dit geval van het type integer zijn.

In de context van de argumenten en firstItem secondItem, naar de bevoegde constructeur moet van het type integer of subklasse. Als u probeert een data-type dat afwijkt van wat is opgegeven is bij het maken van een object te verzenden, zal de compiler niet laten deze fout. Dus de argumenten constructor wanneer een object is als volgt: Het paar obj = new pair <> (new Integer (1), nieuwe Integer (2)). Hetzelfde geldt voor de argumenten en methoden setFirst setSecond. En zoals je waarschijnlijk al geraden, methoden getFirst getSecond en zal een waarde van het type Integer terug te keren.

Gegeneraliseerd worden met verschillende parameters klasse types

In algemene klassen kunnen maken voorts meerdere parameters van het type die in hoekijzers een komma. Ontworpen door een case Pair klasse is hieronder weergegeven.

Zoals u kunt zien, wanneer u een exemplaar van deze klasse te creëren in de hoek tussen haakjes moet hetzelfde aantal types als parameters aan te geven. Als je bekend bent met dit soort gegevens structuur als een kaart, kunt u zien dat het precies hetzelfde principe gebruikt. Daar het eerste argument geeft het type van de belangrijkste, en de tweede - de aard van de waarde. Opgemerkt wordt dat wegens verzonden als een object argumenten kunnen overlappen. Bijvoorbeeld, de volgende advertentie Pair klasse-instantie is absoluut correct: Pair obj.

Sommige functies van generalisaties

Voordat we verder gaan, moet worden opgemerkt dat de Java-compiler geen verschillende versies van de klasse Pair schept. In feite is in het proces van het samenstellen van een algemene soort alle informatie wordt gewist. In plaats daarvan, breng je de juiste types, het creëren van een speciale versie van de klasse Pair. Echter, in het programma is er nog steeds slechts een generieke versie van de klas. Dit proces heet in Java Generic reiniging type.

Let op een belangrijk punt. Links naar verschillende versies van hetzelfde java algemene klasse kunnen niet wijzen op één en hetzelfde object. Dat wil zeggen, stel dat we hebben twee links: Paar obj1 en Pair obj2. Bijgevolg overeenkomstig obj1 = obj2 een fout. Hoewel beide variabelen van het type Pair , de objecten waarnaar zij verwijzen, zijn verschillend. Dit is een goed voorbeeld van het type van de veiligheid in Java Generic.

Beperkingen op generieke klassen

Het is belangrijk om te weten dat generalisaties alleen kan worden toegepast op types verwijzen, dat wil parameters algemene klasse java argument moet een klasse type zijn passeren. Deze eenvoudige types, zoals bijvoorbeeld dubbele of lange, niet overdraagbaar. Met andere woorden, wordt de volgende regel Pair klasse verklaring niet toegestaan: Paar obj. Echter, deze beperking is niet een ernstig probleem, want er is een overeenkomstige Java wrapper klasse voor elk primitief type. Strikt genomen, als de klasse Pair u wilt kapselen een integer en Booleaanse waarde avtoupakovka doet alles voor u: Pair obj = new Pair <> (25, true).

Een andere ernstige beperking is het onvermogen om een exemplaar van het type parameter te maken. Zo zal de volgende regel een compilatie fout veroorzaken: T eerste = new T (). Dit ligt voor de hand, omdat je niet van tevoren weten of een argument doorgegeven een volledige klas of abstract, of zelfs interface. Hetzelfde geldt voor het creëren van arrays.

beperkte types

Vaak zijn er situaties waarin het noodzakelijk is om de lijst van soorten die als een argument om algemene klasse java kan worden doorgegeven beperken. Laten we aannemen dat in onze klasse Pair willen we alleen de numerieke waarden voor nieuwe wiskundige bewerkingen op hen in te kapselen. Om dit te doen moeten we de bovengrens van het type parameter te definiëren. Het wordt gerealiseerd door middel van een superklasse advertenties geërfd argumenten doorgegeven hoekijzers. Het zal er als volgt uit: class Pair . Op deze wijze kan de compiler constateert dat in plaats van de parameter T kan gesubstitueerd of klasse Number of één van zijn subklassen.

Dit is een veel voorkomende receptie. Dergelijke beperkingen worden vaak gebruikt om het type compatibiliteit parameters in één en dezelfde klasse. Neem het voorbeeld in onze klasse Pair: klasse Pair . Hier vertellen we de compiler dat het type T willekeurig kan worden, en V-type moet ofwel het T-type of een van zijn subklassen zijn.

Het beperken van de "bottom" is precies dezelfde manier, maar in plaats van het woord strekt zich uit tot het woord super spellen. Dat is geclassificeerd klasse Pair zegt dat in plaats van T kan worden vervangen of een ArrayList, of enige klasse of interface die erft.

Generieke Java methoden en constructeurs

In Java, generalisaties kan niet methoden alleen toegepast op de klassen, maar ook. Zo kan bijvoorbeeld een generieke methode worden verklaard in een reguliere klas.

Zoals te zien in de figuur hierboven, de advertentie algemene methode is geen big deal. Genoeg voor de terugkeer type van een methode om de hoekbeugels gebracht en ofwel het type parameters bevat.

Als alles op dezelfde manier wordt gedaan om de bouwer:

Punthaakjes in dit geval voorgelegd aan de naam van de ontwerper, want hij heeft geen return waarde. Het resultaat van beide programma's zijn:

geheel getal

snaar

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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