2016-05-31 6 views
0

最初の質問、親切にしてください!印刷するJavaオブジェクトの内容を確認

私は、次のような状況があります。

私はどちらか本当に複雑ではありませんが、単純ではない別の件のデータを持つクラスのカップルを、持っています。

これらのクラスのオブジェクトからこれらのクラスのデータを取得し、特定の形式で出力する必要があります。これはまだ正確にはわかりません。例えば

public class A{ 
    public int data1; 
    public String data2; 
} 

public class B{ 
    public Map<String, A> map1; 
} 

B obj; 

私はテーブルのように、所定のフォーマットにPDFにOBJを印刷する必要があります。

私の考えは、pdfのxml記述を派生させ、xmlを読んで、どこにテキストを置くか、どのフォントを使ってPDF書込みを行うかのようにすることです。例えば

<document> 
    <text id="val1.data1" x="10" y="10" /> 
    <text id="val1.data2" x="100" y ="10" /> 
    <text id="val2.data1" x="10" y="100" /> 
    <text id="val2.data2" x="100" y ="100" /> 
</document> 

このソリューションは、それは私がコードからドキュメントフォーマットを分離することを可能にしても、私はオブジェクトからデータを取得分離することはできませんが、私はまだ取得する必要がありますidsを手動で変更してください。

if(id=="data1"){ 
    A.getData1(); 
}else if(id=="data2"){ 
    A.getData2(); 
} 

私が避けたいものです。

私はそれをどのように設計することができますか?私はすでにどこでも好きなものをpdfで描くことができます。必要なときにデータを取得することができます。ドキュメントテンプレートとそのデータはいつでも私が知る限り変更できるので、すべてをよりデカップリングしたいと思います。

ありがとうございました!

+1

[私はJavaで文字列を比較しますか]をお読みください(http://stackoverflow.com/questions/513832/how-do-i -compare-strings-in-java) – SomeJavaGuy

+0

私は、最も簡単な方法は、キー "val1.data1" 'を使って' val1.data1'をマップに入れることだと思うので、単に ' XML内の「id」。 –

+0

マップは良い出発点です。私はそれをデカップルし、実際にレンダリングするクラスにオブジェクトに直接作用するのではなく、書き込む値を表すマップを取得させることができます。テンプレートがあまりにも多く変更された場合は、コードを変更する必要がありますが、結局のところ回避できないかどうかはわかりません。 – bracco23

答えて

0

あなたが使用する余分なメモリのビットを気にしない場合、AのコンストラクタでA.

内部ID =>値からマップを持っているだろう、これを行う方法、に値を割り当てます地図。必要な値を取得するときにmap.get(id)を実行するだけで、必要な形式にキャストできます。

1

toString()メソッドをclassに設定すると、objectを印刷しようとすると呼び出されます。ので、あなたのclassreturnフォーマットさString元でoverridemethod: -

@override 
public String toString() { 
    return 
    "<text id=" +this.data1 + " x= " +this.x+ " y=" +this.y +"/>"; 
} 
+0

私は別の何かをする必要があります。私は、上記のXML形式の文書の説明、およびデータを取得するオブジェクトを取得し、その記述とそのデータを持つ文書を作成する必要があります。 – bracco23

+0

上記のアプローチでそれを行うことはまだ可能です。コードを生成するためのforループを使用します。 – Priyamal

関連する問題