Hva er [Ljava.lang.Object ;?
1. Oversikt
I denne opplæringen lærer vi hva [Ljava.lang.Objekt midler og hvordan du får tilgang til de riktige verdiene til objektet.
2. Java-objektklasse
I Java, hvis vi vil skrive ut en verdi direkte fra et objekt, er det første vi kan prøve å kalle den toString metode:
Object [] arrayOfObjects = {"John", 2, true}; assertTrue (arrayOfObjects.toString (). startsWith ("[Ljava.lang.Object;"));
Hvis vi kjører testen, vil den være vellykket, men vanligvis er det ikke et veldig nyttig resultat.
Det vi ønsker å gjøre er å skrive ut verdiene i matrisen. I stedet har vi det [Ljava.lang.Objekt. Navnet på klassen, som implementert i Objekt.klasse :
getClass (). getName () + '@' + Integer.toHexString (hashCode ())
Når vi får klassenavnet direkte fra objektet, får vi de interne navnene fra JVM med deres typer, det er derfor vi har ekstra tegn som [ og L, representerer de henholdsvis Array og ClassName-typene.
3. Skrive ut meningsfulle verdier
For å kunne skrive ut resultatet riktig, kan vi bruke noen klasser fra java.util pakke.
3.1. Arrays
For eksempel kan vi bruke to av metodene i Arrays klasse for å takle konverteringen.
Med endimensjonale matriser kan vi bruke toString metode:
Object [] arrayOfObjects = {"John", 2, true}; assertEquals (Arrays.toString (arrayOfObjects), "[John, 2, true]");
For dypere matriser har vi deepToString metode:
Objekt [] innerArray = {"Vi", "Er", "Innvendig"}; Objekt [] arrayOfObjects = {"John", 2, innerArray}; assertEquals (Arrays.deepToString (arrayOfObjects), "[John, 2, [We, Are, Inside]]");
3.2. Streaming
En av de viktigste nye funksjonene i JDK 8 er introduksjonen av Java-strømmer, som inneholder klasser for behandling av sekvenser av elementer:
Object [] arrayOfObjects = {"John", 2, true}; List listOfString = Stream.of (arrayOfObjects) .map (Object :: toString) .collect (Collectors.toList ()); assertEquals (listOfString.toString (), "[John, 2, true]");
Først har vi opprettet en strøm ved hjelp av hjelpemetoden av. Vi har konvertert alle objektene i matrisen til en streng ved hjelp av kart, så har vi satt den inn i en liste ved hjelp av samle inn for å skrive ut verdiene.
4. Konklusjon
I denne opplæringen har vi sett hvordan vi kan skrive ut meningsfull informasjon fra en matrise og unngå standard [Ljava.lang.Object ;.
Vi kan alltid finne kildekoden for denne artikkelen på GitHub.