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.