java generic array how simulate generic arrays java
In deze zelfstudie wordt uitgelegd hoe u de functionaliteit van een generieke array in Java simuleert met behulp van Object Array en ook met behulp van Reflection Class met een eenvoudig voorbeeld:
We hebben het al besproken Java-generieke geneesmiddelen in een van onze vorige tutorials. Java staat generieke klassen, methoden, enz. Toe die onafhankelijk van typen kunnen worden verklaard. Java staat echter niet toe dat de array algemeen is.
De reden hiervoor is dat arrays in Java informatie bevatten met betrekking tot hun componenten en deze informatie wordt gebruikt om tijdens runtime geheugen toe te wijzen. Als generieke gegevens worden gebruikt, bevat de bytecode geen generieke informatie vanwege het wissen van het type.
Bezoek hier om Java vanaf het begin te leren.
Wat je leert:
Generieke matrix in Java
Als u een generieke array heeft gedefinieerd, is het componenttype tijdens runtime niet bekend. Het is dus niet aan te raden arrays in Java als generiek te definiëren.
Een generieke array-definitie is zoals hieronder weergegeven:
De compiler weet niet het exacte type dat moet worden geïnstantieerd, aangezien de type-informatie niet beschikbaar is tijdens runtime.
Dus in plaats van arrays, wanneer generieke geneesmiddelen vereist zijn, zou u de voorkeur moeten geven aan de lijstcomponent van het Java Collections-framework. U kunt echter algemene structuren maken die op een array lijken met behulp van de object-array en reflectiefunctie van Java.
Deze twee benaderingen waarmee we arrays van verschillende gegevenstypen kunnen definiëren, worden hieronder in detail uitgelegd.
angularjs interviewvragen en antwoorden voor ervaren pdf
Maak en initialiseer de generieke array
Laten we in dit gedeelte een matrixachtige structuur maken die generiek van aard is. Met behulp van deze structuren kunt u arrays maken door het gegevenstype als argument op te geven.
Object Array gebruiken
Deze benadering gebruikt de array van het type Objects als lid van de hoofdmatrixklasse. We gebruiken ook get / set-methoden om de array-elementen te lezen en in te stellen. Vervolgens instantiëren we de hoofdmatrixklasse waarmee we het gegevenstype naar behoefte kunnen opgeven.
Dit simuleert de generieke array.
Het volgende programma demonstreert het gebruik van object-array om een generieke array-achtige structuur te creëren.
Uitgang:
In het bovenstaande programma hebben we een klasse Array gedefinieerd die generiek is. De object-array is een lid van de klasse die wordt geïnstantieerd met behulp van een constructor en lengte. We gebruiken ook de generieke methoden get en set die worden gebruikt om een array-element van een bepaald type te lezen en in te stellen.
Vervolgens maken we instanties van deze arrayklasse. Bij het aanmaken van instanties kunnen we het gewenste type specificeren. In het bovenstaande programma hebben we twee arrays van het type Integer en String gemaakt en vervolgens vullen we deze arrays met de juiste waarden (met behulp van de set-methode).
Ten slotte gebruiken we de overschreven ‘toString’ -methode om de inhoud van elk van deze instanties weer te geven.
Reflection gebruiken
In deze benadering gebruiken we een reflectieklasse om een generieke array te maken waarvan het type alleen tijdens runtime bekend is.
De benadering is vergelijkbaar met de vorige met slechts één verschil, namelijk dat we de reflectieklasse in de constructor zelf gebruiken om een objectarray te instantiëren door de datatype-informatie expliciet door te geven aan de klassenconstructor.
Dit type informatie wordt doorgegeven aan de reflectiemethode Array.newInstance.
Het volgende programma toont het gebruik van reflectie om een generieke array te maken Merk op dat de volledige programmastructuur vergelijkbaar is met de vorige benadering, met alleen het verschil in het gebruik van reflectiefuncties.
Uitgang:
Het bovenstaande programma toont arrays van twee typen, namelijk Integer en String gemaakt op basis van de generieke klasse Arrays.
Generieke fout bij het maken van een array
We hebben de implicaties van het maken van generieke arrays in Java al besproken en waarom het niet mogelijk is om generieke arrays in Java te hebben. Een andere verklaring hiervoor is dat arrays in Java covariant zijn, terwijl generieke geneesmiddelen dat niet zijn. Generieke geneesmiddelen zijn onveranderlijk.
Met covariantie bedoelen we dat een array van het subtype kan worden toegewezen aan zijn supertype-referentie.
Dit betekent dat de volgende verklaring prima werkt.
wat is de implementatiefase in de sdlc?
Omdat Integer een subtype van Getal is, compileert de bovenstaande instructie prima.
Maar als we hetzelfde concept gebruiken met generieke geneesmiddelen, zal het niet werken, d.w.z. met generieke geneesmiddelen kunnen we het subtype generiek niet toewijzen aan een supertype generiek.
De instructie, ListobjList = new ArrayList (); zal een compilatiefout geven aangezien generieke geneesmiddelen niet covariant zijn zoals arrays.
Rekening houdend met de bovenstaande reden, kunnen we ook niet zoiets als hieronder hebben:
Deze verklaring zal niet compileren met de fout, 'Generieke array-creatie' omdat we geen reeks verwijzingen naar een specifiek generiek type kunnen declareren.
We kunnen echter een reeks verwijzingen naar een specifiek generiek type maken met behulp van jokertekens. De bovenstaande verklaring kan met succes worden gecompileerd met een kleine wijziging van het gebruik van een jokerteken, zoals hieronder wordt weergegeven.
De bovenstaande verklaring zal met succes worden gecompileerd.
Het volgende programma toont een demonstratie van het gebruik van jokertekens.
beste pc-reparatiesoftware voor Windows 10
Uitgang:
In het bovenstaande programma hebben we de eerste verklaring in de hoofdmethode die de onveranderlijkheid van generieke geneesmiddelen aangeeft. Deze verklaring zal de compilatiefout knipperen (weergegeven in opmerkingen). De volgende array-creatie is volgens de regels van generieke geneesmiddelen en daarom compileren ze met succes.
Veel Gestelde Vragen
V # 1) Wat is een generieke array?
Antwoord: Arrays die onafhankelijk zijn van het gegevenstype en waarvan het type informatie tijdens runtime wordt geëvalueerd, zijn generieke arrays. Generics zijn vergelijkbaar met sjablonen in C ++.
Vraag 2) Kun je een generieke array in Java maken?
Antwoord: Arrays zijn covariant in Java, d.w.z. elke subklasse-array kan worden toegewezen aan een supertype-array. Generieke gegevens zijn echter invariant, d.w.z. u kunt de array van het subklassetype niet toewijzen aan het superklassetype.
Ten tweede wordt de generieke informatie verwijderd uit JVM en dus weet de array waarvan de geheugentoewijzing tijdens runtime wordt uitgevoerd, niet welk type aan de array moet worden toegewezen. Arrays en generics gaan dus niet goed samen in Java.
V # 3) Wat is Type E in Java?
Antwoord: fungeert als een tijdelijke aanduiding voor generieke geneesmiddelen en vertegenwoordigt elk type element.
V # 4) Wat is Type Erasure in Java?
Antwoord: Een proces dat wordt uitgevoerd door een Java-compiler waarmee de geparametriseerde typen die in generieke geneesmiddelen worden gebruikt, worden verwijderd en toegewezen aan onbewerkte typen in bytecode. Als zodanig bevat de bytecode geen informatie over generieke geneesmiddelen.
V # 5) Wat is een onbewerkt type in Java?
Antwoord: Raw-typen zijn generieke typen zonder de parameter type te gebruiken. Bijv. Lijst is een onbewerkt type; terwijl List een geparametriseerd type is.
Gevolgtrekking
In Java kan de generieke array niet rechtstreeks worden gedefinieerd, dat wil zeggen dat u geen type met parameters kunt toewijzen aan een arrayverwijzing. Door echter objectmatrices en reflectiefuncties te gebruiken, kunt u het maken van generieke arrays simuleren.
We hebben deze twee benaderingen in deze tutorial gezien, samen met de details van een generieke fout bij het maken van een array en de mogelijkheden om een dergelijke fout te voorkomen. In een notendop, in Java kun je zeggen dat arrays en generieke geneesmiddelen niet hand in hand gaan, aangezien arrays covariant zijn en generieke geneesmiddelen onveranderlijk.
Bekijk hier de perfecte Java-trainingsgids.
Aanbevolen literatuur
- Java Array - Hoe elementen van een array in Java af te drukken?
- Zelfstudie over Java-array-lengte met codevoorbeelden
- Zelfstudie over reflectie in Java met voorbeelden
- Java Array - Declareer, creëer en initialiseer een array in Java
- Inleiding tot Java-arrays en gerelateerde concepten
- Java Generics-zelfstudie met voorbeelden
- Java SWING-zelfstudie: afhandeling van containers, componenten en gebeurtenissen
- Java DataTypes, Loops, Arrays, Switch en Assertions