PHPのvar_dumpに相当するJavaは何ですか?


127

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
あなたはdb4oを試しましたか?それは特にこれのためではありませんが、私は完全に機能すると思います。
アクエリアスパワー

回答:


67

これはJavaに組み込まれているわけではないため、無料で入手することはできません。 これは、言語構造ではなく規則で行われます。すべてのデータ転送クラス(およびおそらく作成したすべてのクラス)でも、賢明なtoStringメソッドを実装する必要があります。したがって、ここではクラスをオーバーライドtoString()してPerson、目的の状態を返す必要があります。

あり利用できるユーティリティ良いtoStringメソッドを書くのヘルプ、またはほとんどのIDEが自動持っていることをtoString()書き込みショートカットが。



Guavaの代替案およびIntellij IDEAテンプレートについては、stackoverflow.com / questions / 9444573 /… も参照してください。
Vadzim 2015年

31

私の経験では、var_dumpは通常、ステップスルーデバッガーの代わりにPHPのデバッグに使用されます。Javaではもちろん、IDEのデバッガーを使用して、オブジェクトの内容を視覚的に表示することができます。


10
うん、ほとんどのPHPまたはWeb開発者はデバッグを忘れます。彼らはブラウザでデバッグ結果を見ることを好むからです。
GusDeCooL 2013

10
たとえば、Adobe Experience ManagerのブラウザーベースのエディターでJSPコードをプログラミングしている場合、IDEのデバッガーを使用することはできません。:(
Trevor

おそらく、それを使用して、html形式でvardumpを出力することにより、ライブ環境でのプログラムの動作をテストできます。
omjego 2018

18

別の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));
}

どこからインポートした、使用しているフィールドは何ですか?
RMiranda 2013

3
java.lang.reflect.Field
Harry Lime

17

私はそれを行うための最良の方法は、google-gson(JSONをJavaオブジェクトに、またはその逆に変換する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()の最高の類似物だと思います


4
興味深い...それが静的メソッドではない理由を知っていますか?
mirelon 2014

2
静的メソッドのように使用できます:新しい変数を作成せずに、新しいGson()。toJson(...)。
Ali Mamedov 2016

Imo、直接使用するよりもカスタムユーティリティクラスに抽象化した方がいいです。これにより、サードパーティの依存関係を柔軟に管理できます
MAYOBYO HASSAN



4

私はGSONを使用するのが好きです。これは、GSONが既に取り組んでいるプロジェクトのタイプに依存していることが多いためです。

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

または、使用する他のJSONライブラリをGSONに置き換えます。



0

XMLシリアライゼーションを使用すると、深くネストされたオブジェクトであっても非常にきちんとした表現が得られるはずです。


0

似ているのは、見たいオブジェクトを出力する単純なメソッドを作成することです。このようなもの:

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

これはvar_dump()と同じではありませんが、デバッガーIDEに移動しなくても、その概要を把握できます。


0

フィールドソリューション(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));
    } 

}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.