Что такое 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, который будет делать то же самое?

Ответ 1

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

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

Ответ 2

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

Ответ 3

Ваши альтернативы должны переопределить метод 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));
}

Ответ 4

Я думаю, что лучший способ сделать это, использует 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()

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

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

Ответ 9

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

Ответ 10

Я думаю, что нечто подобное вы могли бы сделать, это создать простой метод, который печатает объект, который вы хотите увидеть. Что-то вроде этого:

public static void dd(Object obj) { System.out.println(obj); }

Это не то же самое, что var_dump(), но вы можете получить общее представление об этом, не обращаясь к вашей IDE отладчика.