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 }; ListlistOfString = Stream.of(arrayOfObjects) .map(Object::toString) .collect(Collectors.toList()); assertEquals(listOfString.toString(), "[John, 2, true]");
Во-первых, мы создали поток, используя вспомогательный метод of. Мы преобразовали все объекты внутри массива в строку с помощью map, затем мы вставили его в список с помощью collect для печати значений.
4. Заключение
В этом уроке мы видели, как мы можем печатать значимую информацию из массива и избегать [Java.lang.Объект;.
Мы всегда можем найти исходный код этой статьи на GitHub .