Что такое Java-эквивалент PHP var_dump?

PHP имеет функцию var_dump (), которая выводит внутреннее содержимое объекта, отображая тип и содержимое объекта.

Например:

class Person { private $firstName; private $lastName; public function __construct($firstName, $lastName) { $this->firstName = $firstName; $this->lastName = $lastName; } } $person = new Person('Jon', 'Smith'); var_dump($person); 

выведет:

 object(Person)#1 (2) { ["firstName:private"]=> string(3) "Jon" ["lastName:private"]=> string(5) "Smith" } 

Что эквивалентно в Java, что будет делать то же самое?

Это не совсем так испечено на Java, поэтому вы не получите это бесплатно. Это делается с помощью конвенций, а не языковых конструкций. Во всех классах передачи данных (и, возможно, даже во всех классах, которые вы пишете … ), вы должны реализовать разумный метод toString . Поэтому здесь вам нужно переопределить toString() в вашем классе Person и вернуть желаемое состояние.

Существуют утилиты, которые помогают при написании хорошего метода toString, или большинство IDE имеют автоматическую toString() ярлыков toString() .

EDIT: ссылки мертвы – теперь доступно here .

По моему опыту, var_dump обычно используется для отладки PHP вместо отладочного шага. В Java вы можете, конечно, использовать отладчик IDE для визуального представления содержимого объекта.

Ваши альтернативы – переопределить метод toString() вашего объекта для вывода его содержимого таким образом, который вам нравится, или использовать отражение для проверки объекта (аналогично тому, что делают отладчики).

Преимущество использования рефлексии заключается в том, что вам не нужно будет изменять отдельные объекты для «анализируемого», но есть дополнительная сложность, и если вам нужна поддержка вложенных объектов, вам придется написать это.

Этот код будет отображать поля и их значения для Object «o»,

 Field[] fields = o.getClass().getDeclaredFields(); for (int i=0; i<fields.length; i++) { System.out.println(fields[i].getName() + " - " + fields[i].get(o)); } 

Я думаю, что лучший способ сделать это, использует google-gson (библиотека Java для преобразования объектов JSON в Java и наоборот)

Загрузите его, добавьте файл «jar» в свой проект

 HashMap<String, String> map = new HashMap<String, String>(); map.put("key_1", "Baku"); map.put("key_2", "Azerbaijan"); map.put("key_3", "Ali Mamedov"); Gson gson = new Gson(); System.out.println(gson.toJson(map)); 

Вывод:

 {"key_3":"Ali Mamedov","key_2":"Azerbaijan","key_1":"Baku"} 

Вы можете конвертировать любой объект (массивы, списки и т. Д.) В JSON. Я думаю, что это лучший аналог PHP var_dump ()

Пакет apache commons lang предоставляет такой класс, который может использоваться для создания метода toString () по умолчанию с использованием отражения для получения значений полей. Просто взгляните на это .

Я использую Jestr с разумными результатами.

Я нашел этот метод для создания объекта dump, попробуйте этот дамп String (объект Object)

Мне нравится использовать GSON, потому что это часто уже зависимость от типа проектов, над которыми я работаю:

 public static String getDump(Object o) { return new GsonBuilder().setPrettyPrinting().create().toJson(o); } 

Или замените GSON на любую другую библиотеку JSON, которую вы используете.

Вы сериализуете XML, и вы должны получить очень аккуратное представление даже глубоко вложенных объектов.