什么是Java var_dump的Java等价物?

问题

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 热门回答(58 赞)

**它并不像Java那样,所以你不能免费获得它。**这是通过约定而不是语言结构完成的。在所有数据传输类中(甚至可能在你编写的所有类中......),你应该实现一个sensibletoString方法。所以在这里你需要覆盖yourPersonclass中的toString()并返回所需的状态。

有3224247106有助于编写一个好的toString方法,或者大多数IDE都有一个自动的toString()写快捷方式。

编辑:链接死 - 现在可用here


#2 热门回答(27 赞)

根据我的经验,var_dump通常用于调试PHP而不是逐步调试器。在Java中,你当然可以使用IDE的调试器来查看对象内容的可视化表示。


#3 热门回答(15 赞)

你可以选择覆盖对象的toString()方法,以你喜欢的方式输出其内容,或者使用反射来检查对象(以类似于调试器的方式)。

使用反射的优点是你不需要将单个对象修改为"可分析",但是增加了复杂性,如果你需要嵌套对象支持,则必须编写它。

此代码将列出aObject"o"的字段及其值

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