Hvad er [Ljava.lang.Object ;?

1. Oversigt

I denne vejledning lærer vi hvad [Ljava.lang.Objekt midler og hvordan man får adgang til de korrekte værdier for objektet.

2. Java-objektklasse

I Java, hvis vi vil udskrive en værdi direkte fra et objekt, er den første ting, vi kunne prøve at kalde dens værdi toString metode:

Objekt [] arrayOfObjects = {"John", 2, sandt}; assertTrue (arrayOfObjects.toString (). startsWith ("[Ljava.lang.Object;"));

Hvis vi kører testen, vil den være vellykket, men normalt er det ikke et meget nyttigt resultat.

Hvad vi vil gøre er at udskrive værdierne inde i arrayet. I stedet har vi det [Ljava.lang.Objekt. Navnet på klassen, som implementeret i Objekt.klasse :

getClass (). getName () + '@' + Integer.toHexString (hashCode ())

Når vi får klassens navn direkte fra objektet, får vi de interne navne fra JVM med deres typer, det er derfor, vi har ekstra tegn som [ og L, de repræsenterer henholdsvis Array og ClassName-typerne.

3. Udskrivning af meningsfulde værdier

For at kunne udskrive resultatet korrekt kan vi bruge nogle klasser fra java.util pakke.

3.1. Arrays

For eksempel kan vi bruge to af metoderne i Arrays klasse til at håndtere konverteringen.

Med endimensionelle arrays kan vi bruge toString metode:

Objekt [] arrayOfObjects = {"John", 2, sandt}; assertEquals (Arrays.toString (arrayOfObjects), "[John, 2, true]");

For dybere arrays har vi deepToString metode:

Objekt [] innerArray = {"Vi", "Er", "Inde"}; Objekt [] arrayOfObjects = {"John", 2, innerArray}; assertEquals (Arrays.deepToString (arrayOfObjects), "[John, 2, [We, Are, Inside]]");

3.2. Streaming

En af de vigtige nye funktioner i JDK 8 er introduktionen af ​​Java-streams, som indeholder klasser til behandling af sekvenser af elementer:

Objekt [] arrayOfObjects = {"John", 2, sandt}; List listOfString = Stream.of (arrayOfObjects) .map (Object :: toString) .collect (Collectors.toList ()); assertEquals (listOfString.toString (), "[John, 2, sand]");

For det første har vi oprettet en stream ved hjælp af hjælpemetoden af. Vi har konverteret alle objekter inde i arrayet til en streng ved hjælp af kort, så har vi indsat det på en liste ved hjælp af indsamle for at udskrive værdierne.

4. Konklusion

I denne vejledning har vi set, hvordan vi kan udskrive meningsfuld information fra et array og undgå standard [Ljava.lang.Object ;.

Vi kan altid finde kildekoden til denne artikel på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found