Рубрики
Без рубрики

Что такое [Java.lang.Объект;?

Узнайте, что [Java.lang.Объект; есть и как лучше печатать объекты массива.

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы узнаем, что [Java.lang.Объект означает и как получить доступ к соответствующим значениям объекта.

2. Класс объектов Java

В Java, если мы хотим напечатать значение непосредственно из объекта, первое, что мы могли бы попробовать, – это вызвать его метод toString :

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

Если мы проведем тест, он будет успешным, но обычно это не очень полезный результат.

То, что мы хотим сделать, – это напечатать значения внутри массива. Вместо этого у нас есть [Ljava.lang.Объект. | Имя класса, как реализовано в Object.class :

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

Когда мы получаем имя класса непосредственно из объекта, мы получаем внутренние имена из JVM с их типами, поэтому у нас есть дополнительные символы , такие как [ и L , они представляют массив и типы имен классов соответственно.

3. Печать Значимых Значений

Чтобы правильно распечатать результат, мы можем использовать некоторые классы из пакета java.util .

3.1. Массивы

Например, мы можем использовать два метода в классе массивов для обработки преобразования.

С одномерными массивами мы можем использовать метод toString :

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

Для более глубоких массивов у нас есть метод Deept-string :

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

3.2. Потоковая передача

Одной из важных новых функций в JDK 8 является введение потоков Java , который содержит классы для обработки последовательностей элементов:

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

Во-первых, мы создали поток, используя вспомогательный метод of. Мы преобразовали все объекты внутри массива в строку с помощью map, затем мы вставили его в список с помощью collect для печати значений.

4. Заключение

В этом уроке мы видели, как мы можем печатать значимую информацию из массива и избегать [Java.lang.Объект;.

Мы всегда можем найти исходный код этой статьи на GitHub .