Was ist [Ljava.lang.Object;?

1. Übersicht

In diesem Tutorial erfahren Sie, was [Ljava.lang.Object bedeutet und wie Sie auf die richtigen Werte des Objekts zugreifen können.

2. Java-Objektklasse

Wenn wir in Java einen Wert direkt aus einem Objekt drucken möchten, können wir zunächst versuchen, die toString- Methode aufzurufen :

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

Wenn wir den Test ausführen, ist er erfolgreich, aber normalerweise ist er kein sehr nützliches Ergebnis.

Wir möchten die Werte innerhalb des Arrays drucken. Stattdessen haben wir [Ljava.lang.Object. Der Name der Klasse, wie in Object.class implementiert :

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

Wenn wir den Klassennamen direkt vom Objekt erhalten, erhalten wir die internen Namen von der JVM mit ihren Typen. Deshalb haben wir zusätzliche Zeichen wie [ und L , sie repräsentieren die Typen Array und ClassName.

3. Drucken aussagekräftiger Werte

Um das Ergebnis korrekt drucken zu können, können wir einige Klassen aus dem Paket java.util verwenden .

3.1. Arrays

Beispielsweise können wir zwei der Methoden in der Arrays- Klasse verwenden, um die Konvertierung durchzuführen.

Bei eindimensionalen Arrays können wir die toString- Methode verwenden:

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

Für tiefere Arrays haben wir die deepToString- Methode:

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

3.2. Streaming

Eine der wichtigsten neuen Funktionen in JDK 8 ist die Einführung von Java-Streams , die Klassen zum Verarbeiten von Elementsequenzen enthalten:

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

Zuerst haben wir einen Stream mit der Hilfsmethode von erstellt. Wir haben alle Objekte im Array mithilfe von map in eine Zeichenfolge konvertiert und sie dann mithilfe von collect in eine Liste eingefügt , um die Werte zu drucken.

4. Fazit

In diesem Tutorial haben wir gesehen, wie wir aussagekräftige Informationen aus einem Array drucken und die Standardeinstellung [Ljava.lang.Object;.

Wir können den Quellcode für diesen Artikel immer auf GitHub finden.