Что такое Java-эквивалент PHP var_dump? - PullRequest
116 голосов
/ 19 ноября 2008

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 будет делать то же самое?

Ответы [ 10 ]

62 голосов
/ 19 ноября 2008

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

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

29 голосов
/ 19 ноября 2008

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

18 голосов
/ 19 ноября 2008

Вы можете переопределить метод 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));
}
14 голосов
/ 13 декабря 2013

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

7 голосов
/ 19 ноября 2008

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

4 голосов
/ 12 мая 2016

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

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

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

4 голосов
/ 13 января 2009

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

2 голосов
/ 18 сентября 2013

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

0 голосов
/ 10 октября 2018

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

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

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

0 голосов
/ 23 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...