Java >> Java tutorial >  >> Tag >> java.lang

Hvad er [Ljava.lang.Object;?

1. Oversigt

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

2. Java-objektklasse

I Java, hvis vi ønsker at udskrive en værdi direkte fra et objekt, er det første, vi kan prøve at kalde dets toString metode:

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

Hvis vi kører testen, vil den lykkes, men normalt er det ikke et særlig brugbart resultat.

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

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

Når vi får klassenavnet direkte fra objektet, får vi de interne navne fra JVM med deres typer, det er derfor, vi har ekstra tegn som [ og L , repræsenterer de 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:

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

For dybere arrays har vi deepToString metode:

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

3.2. Streaming

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

Object[] arrayOfObjects = { "John", 2, true };
List<String> listOfString = Stream.of(arrayOfObjects)
  .map(Object::toString)
  .collect(Collectors.toList());
assertEquals(listOfString.toString(), "[John, 2, true]");

For det første har vi oprettet en strøm ved hjælp af hjælpemetoden af. Vi har konverteret alle objekterne inde i arrayet til en streng ved hjælp af map, så har vi indsat det på en liste ved hjælp af collect for at udskrive værdierne.

4. Konklusion

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

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


Java tag