【问题标题】:What is the Java equivalent of PHP var_dump?PHP var_dump 的 Java 等价物是什么?
【发布时间】:2010-09-23 00:37:21
【问题描述】:

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 中有什么等价物可以做到这一点?

【问题讨论】:

  • 你试过db4o吗?它不是专门为此而设计的,但我认为它会完美运行;

标签: java php


【解决方案1】:

只是为了添加字段解决方案(setAccessible),以便您可以访问对象的私有变量:

public static void dd(Object obj) throws IllegalArgumentException, IllegalAccessException {
    Field[] fields = obj.getClass().getDeclaredFields();
    for (int i=0; i<fields.length; i++)
    {
        fields[i].setAccessible(true);
        System.out.println(fields[i].getName() + " - " + fields[i].get(obj));
    } 

}

【讨论】:

    【解决方案2】:

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

    utilities available 可以帮助编写一个好的 toString 方法,或者大多数 IDE 有一个自动的toString() 编写快捷方式。

    【解决方案3】:

    我认为您可以做的类似事情是创建一个简单的方法来打印您想要查看的对象。像这样的:

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

    它与 var_dump() 不同,但您可以大致了解它,而无需转到调试器 IDE。

    【讨论】:

      【解决方案4】:

      apache commons lang 包提供了这样一个类,它可以用来构建一个默认的 toString() 方法,使用反射来获取字段的值。看看this

      【讨论】:

      【解决方案5】:

      我喜欢使用 GSON,因为它通常已经依赖于我正在从事的项目类型:

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

      或将 GSON 替换为您使用的任何其他 JSON 库。

      【讨论】:

        【解决方案6】:

        我认为最好的方法是使用 google-gson(将 JSON 转换为 Java 对象的 Java 库,反之亦然)

        Download它,将“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()

        的最佳模拟

        【讨论】:

        • 有趣...你知道为什么它不是静态方法吗?
        • 您可以像使用静态方法一样使用它:new Gson().toJson(...) 而无需创建新变量。
        • Imo,最好将其抽象为自定义实用程序类而不是直接使用它,这使您可以灵活地管理第三方依赖项
        【解决方案7】:

        我找到了这个转储对象的方法,试试这个String dump(Object object)

        【讨论】:

          【解决方案8】:

          你的 XML 序列化,你应该得到一个非常整洁的表示,即使是深度嵌套的对象。

          【讨论】:

            【解决方案9】:

            您的替代方法是覆盖对象的 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));
            }
            

            【讨论】:

            • 你使用的那个字段是什么,从哪里导入的?
            • java.lang.reflect.Field
            【解决方案10】:

            我使用Jestr 得到了合理的结果。

            【讨论】:

              【解决方案11】:

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

              【讨论】:

              • 是的,大多数 PHP 或 Web 开发人员忘记了调试。因为他们更喜欢在浏览器中查看调试结果。
              • 例如,如果您在 Adob​​e Experience Manager 的基于浏览器的编辑器中编写 JSP 代码,则不能使用 IDE 的调试器。 :(
              • 也许我们可以通过以 html 格式打印 vardump 来使用它来测试您的程序在实时环境中的行为。
              猜你喜欢
              • 1970-01-01
              • 2010-09-27
              • 1970-01-01
              • 2011-08-05
              • 2017-06-13
              • 1970-01-01
              • 1970-01-01
              • 2010-09-24
              • 2012-09-14
              相关资源
              最近更新 更多