2011-07-16 7 views
1

Google Gsonを使用してJSONに変換する簡単な方法を書いていました。大丈夫メソッドの引数としてObjectオブジェクトを渡してもかまいません。

public static String buildJSONObject(Object obj) { 
    Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); 
    return gson.toJson(obj); 
} 

そして今、私はこれに関する二つの質問(作品)、オブジェクトを使用して

-Isを持っている:それは簡単ですが、私はさらに変更を加えたい場合には、私はJSONの構築プロセスを一元化したいですメソッドの引数として、またはジェネリックスを使用するより良い方法がありますか?

- メソッドに渡されるオブジェクトの種類に関係なく、常にオブジェクトをキャストするとパフォーマンスオーバーヘッドがありますか?

+0

ジェネリックスは、コンパイル時の型の安全性の利点を提供します。したがって、このメソッドを使用するタイプを知っている方がよいでしょう。 –

答えて

1

オブジェクトをメソッド引数として使用していますか、またはジェネリックスを使用するより良い方法がありますか?

ジェネリックスはタイプセーフティを提供し、より明確な意図を示し、よりクリーンなコードにつながります。つまり、メソッドに渡すオブジェクトの種類がわかっていて、JSONのすべてのオブジェクトを継承するオブジェクト階層構造を確立している場合、実際にはこれらの利点があります。あなたが本当に太陽の下のオブジェクトをJSONに変換できるようにしたい場合は、Object objが行く方法です。

メソッドに渡されるオブジェクトの種類にかかわらず常にオブジェクトをキャストするとパフォーマンスオーバーヘッドはありますか?

キャストに関するパフォーマンス上の問題はありません。あなたが気にしなければならないのは、型の安全と、無効なキャストからのRuntimeExceptionsです。あなたのメソッドに入るオブジェクトの種類が確実であれば、キャストを行うのに注意してください。 instanceofを最初にチェックして安全なキャストをいつでも行うことができます。これにより、この問題は少なくなります。

0

メソッドに任意の種類のオブジェクトを渡したいと思っていますか?その場合、パラメータタイプはObjectである必要があります。それがすべてです。ジェネリックスは、実際に入力タイプを制約するなど、入力メソッドを呼び出すことができるようにして、メソッドへの複数のパラメータが特定の方法で関連していることを確認したり、出力タイプが入力に関連していることを確認したりこの場合、汎用パラメータはObjectが提供しない何も提供しません。

あなたは確かにそれからのオーバーヘッドを心配するべきではありません(とにかく、おそらく何もありません)。オーバーヘッドについて心配したい場合は、Gsonオブジェクトを再利用することができるときに、GsonBuilderの新しいインスタンスを作成して、Gsonという新しいインスタンスを作成する方法について心配してください。

+0

私は実際にGsonBuilderを格納するために静的フィールドを使用していますが、違いが生じた場合にgsonビットにどのように到着したかを示したかったのです。しかし、これでJetS3tユーティリティを使って見たことがありましたが、修正しました。ありがとうございました。 – oberger

関連する問題