Dimensies invoegen om uitdrukking / referencetype te voltooien

Ik ben een newbie naar Java.

Ik heb een kort fragment gegeven uit mijn code voor BFS.

public int bfs(Person p, Person q) {
    private HashMap<Person, boolean> marked;
    private int count;
    marked = new marked<Person, boolean>();
    count = new int;
}

Volgens Eclipse heb ik een fout opgetreden op elk van de laatste 4 regels.

SYNTAX FOUT: INSERT “DIMENSIONS” om uitdrukking / referencetype te voltooien.

Ik zou elke invoer / advies op prijs stellen!


Antwoord 1, Autoriteit 100%

Oorzaak van deze fout – u probeert een primitief object door te geven in een generieke verklaring van het type, terwijl generieke typen altijd een wrapper-klassenobject verwachten. Dus gebruik alsjeblieft ‘Boolean’ in plaats van ‘Boolean’ in je code I.E. ‘B’ in Caps.


Antwoord 2, Autoriteit 20%

U moet het wrapperobject gebruiken, niet de primitieve. Gebruik boolean in plaats van Boolean.


Antwoord 3, Autoriteit 2%

Generieke worden tijdens het compileren opgelost en tijdens runtime hun geen context over de generieke gebruikte in uw code. Het object is dan het type dat in het klassentype wordt uitgeoefend dat tegen het generieke type wordt verstrekt. Nu zijn zowel primitief als object volledig niet-gerelateerde entiteiten in Java. Directe tijd-cast van object tot primitieve type is niet mogelijk in Java. Om deze reden wordt het gebruik van primitieve type in generiek niet toegestaan ​​en geeft de verduistering deze waarschuwing.


Antwoord 4, Autoriteit 2%

Satyendra Sharma’s antwoord is absoluut correct, maar hier is een redenering van wat het foutbericht precies zegt.

De fout wordt veroorzaakt door het gebruik van een primitief type, dat niet kan worden gebruikt als een generiek type argument. Bijvoorbeeld, List<boolean>is onjuist, terwijl List<boolean>is correct. Wrapper-klassen kunnen worden gebruikt om de primitieve waarden in te pakken en een referentietype op te leveren, dat met generieke geneesmiddelen kan worden gebruikt.

Dimensies invoegen? Wat?

Het bericht “Dimensies invoegen om uitdrukking / referencetype te voltooien” is waarschijnlijk omdat om de uitdrukking geldig te worden, het enige geldige token hier is een reeks vierkante haakjes.

Bijvoorbeeld,

HashMap<Person, boolean[]> marked;

compileer gewoon prima. Dit komt omdat, in tegenstelling tot een boolean, A boolean[]is een object .


Antwoord 5

Eerst zou ik voorstellen dat je begint met het lezen van een Java-tutorial …

https://docs.oracle.com/javase/tutorial/java/ Toc.html

Voor uw problemen specifiek:

Wat uw code betreft, kunt u uw variabelen precies initialiseren wanneer u deze verklaart:

   Map<Person, Boolean> marked = new HashMap<Person, Boolean>();
    int count = 0; // or whatever initial value

Antwoord 6

Het lijkt erop dat dit fragment willekeurige trefwoorden gebruikt zonder enig begrip – ik zou een Java-zelfstudie aanraden. Allereerst zijn generieke geneesmiddelen een van de belangrijkste toepassingen voor boksen. booleanof andere primitieven (je kunt deze herkennen aan het feit dat hun identifiers in kleine letters zijn en de meeste IDE’s zullen ze markeren) kan nietworden gebruikt als een generiek type, en hun equivalent met een hoofdletter moet worden gebruikt (een eenvoudige wrapper-klasse). Gebruik hier HashMap<Person, Boolean>.

Ik weet niet zeker wat wordt bedoeld met marked = new marked...– duidelijk, markedis geen type en kan in deze context niet worden gebruikt. new x(params)initialiseert een object van het type xen geeft zijn constructor paramsdoor. new x<generics>(params)is hetzelfde, maar de generieke type(n) van xzijn generics.

Ten slotte is new inthelemaal niet geldig – zie mijn uitleg hierboven. Primitieven zijn geenobjecten, wat betekent dat het initialiseren ervan zinloos is en daarom ongeldig. En wat verwacht je dat deze uitdrukking oplevert? Iets van het type int, maar je specificeert niet welke int. De juiste syntaxis is letterlijk: count = x;waarbij xeen geheel getal is binnen het bereik van int.

Als een kanttekening, uw methode heeft een onduidelijke naam en variabelen kunnen worden geïnitialiseerd in dezelfde regel waarin u ze declareert om de code te vereenvoudigen.


Antwoord 7

Ga naar Kan geen generieke typen met primitieve typen instantiëren

Vervang alle typeparameters in generieke typen door hun grenzen of Object als de typeparameters onbegrensd zijn. De geproduceerde bytecode bevat daarom alleen gewone klassen, interfaces en methoden.

De typeparameter, V, eigenlijk ook K, die is gedeclareerd in HashMap<K,V>, wordt vervangen door Objectna het wissen, omdat ze onbegrensd zijn. Hoewel primitief type niet kan worden opgeslagen als Object.

Other episodes