2012-02-07 3 views
5

エラー時にいくつかのコードや印刷ダンプの内部を理解するためにppのような関数をPythonとEmacs lispに使用しています。Java用のOBJECT表現がきれいに印刷された標準ライブラリやテクニックを探してください

今私は、JavaのためのOBJECTの表現がきれいに印刷されるように、標準のライブラリまたはtecniqueを探すためにJavaに行きます。

は、現在のJava仕様は、実行時にJavaオブジェクトのイントロスペクションが可能と思われます。しかし、内省はそれほど強力ではないかもしれません。 M(物体O)新しいオブジェクト[]引数で呼び出すことができないのですか?

NOTE私は、ソースコードのビューティを見ていないをしています!私は実行時にかなりのJavaオブジェクトのダンプ印刷を探しています。

注2似ていますが、まったく同じではないこれらの質問:Javaオブジェクトの出力を表示するために迅速かつ汚いソリューションについては

+1

。 Javaのようにコンパイルされた言語ではそれほど少なくありません。そこで、ブレークポイントを設定し、デバッガの変数を検査しています。それは賢明ではありませんが、作業の仕方を変えることを検討することもできます。素敵な 'toString'sを実装することも役に立ちます。 –

+0

@JoopEggenデバッガに関するヒントをありがとう! GUIデバッガを使用する必要がありますか、またはjdbがクラスの内容(整数の配列)をうまく印刷できますか?私はEmacsを使用しているので、簡単にjdbの出力を保存して処理することができます。 – gavenkoa

+0

** jdb **デバッガで** class **コマンドを使用してクラスの競合を表示するには! – gavenkoa

答えて

11

Apache Commons LangライブラリのReflectionToStringBuilderを使用できます。

サンプル:あなたの質問に関しては

String dump = ReflectionToStringBuilder.toString(object); 

メートル(オブジェクトo)は引数[]新しいオブジェクトを呼び出すことはできませんか?

Objectの配列は、Objectのサブタイプです。 LispとPythonなどの言語のための典型的なアプローチである

7

、あなたはジャクソンを使用することができますhttp://jackson.codehaus.org/これは、オブジェクトを出力しますJSON。

+1

詳細については、[ObjectMapper](https://fasterxml.github.io/jackson-databind/javadoc/2.5/com/fasterxml/jackson/databind/ObjectMapper.html)を参照してください。 '(new com .fasterxml.jackson。())。writerWithDefaultPrettyPrinter()。writeValueAsString(オブジェクト); ' –