2011-08-15 8 views
3

次の二つの方法は、Google Gsonを使用して直列化復元をラップするために使用されています重複したコードを取り除くために、これらのラッパーメソッドをどのようにリファクタリングすることができますか?

public static <T> T Deserialize(String jsonData, Type t) { 
    T obj = null; 

    try { 
     obj = new Gson().fromJson(jsonData, t); 
    } catch (Exception e) { 
     Log.e(DEBUG_TAG, e.getMessage()); 
    } 

    return obj; 
} 

public static <T> T Deserialize(String jsonData, Class<T> toClass) { 
    T obj = null; 

    try { 
     obj = new Gson().fromJson(jsonData, toClass); 
    } catch (Exception e) { 
     Log.e(DEBUG_TAG, e.getMessage()); 
    } 

    return obj; 
} 

彼らはほとんど同じですが、私は重複したコードを取り除くためにスマートな方法を把握することはできません。

提案がありますか?

+2

いずれかの方法を削除する際は注意が必要です。 JavaDocを見てください:http://google-gson.googlecode.com/svn/tags/1.2.3/docs/javadocs/com/google/gson/Gson.html#fromJson(java.lang.String、java.lang 。クラス)。ジェネリック医薬品と非ジェネリック医薬品の2つの方法を提供するのは非常に良い理由があると確信しています。 – home

+0

@homeこれを指摘してくれてありがとう、私は私の答えを編集しました –

+0

@クライカン:いいえprob、+1 – home

答えて

3

Classは、インターフェイスTypeを実装しているため、最初のメソッドで十分であるように見えます。

編集:実際には、これらのメソッドが理由で個別に実装されているようです。リファクタリング前の理由を理解するには少なくともthe javadocと読んでください。これを指摘してくれてありがとう。

+0

おそらくそれを知っている必要があります。ありがとう! – aspartame

1

TypeClassで実装されているインターフェイスなので、2番目のメソッドを完全に削除できます。

+0

'Class'はクラスなので、技術的には' Type'はスーパーインタフェースではなく、単に実装するだけです。 –

+0

いいえ、 'fromJson'メソッドは、クラスまたは型オブジェクトを取るためにオーバーロードされます。 javaは引数の動的型にディスパッチしないので、常に 'Type'引数を使ってオーバーロードを呼び出します。 –

+0

@Kublai Khan - ありがとう。私は私の答えを編集する。 – Kal