2011-08-15 52 views
3

以下两种方法用于使用谷歌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 。类)。我很确定他们有很好的理由提供两种方法,一种是泛型,另一种是非泛型。 – home

+0

@home感谢您指出这一点,我编辑了我的答案 –

+0

@Kublai Khan:没有问题,+1 – home

回答

3

Class实现了接口Type,所以它看起来像只有第一种方法应该是足够的。

编辑:实际上它看起来像这些方法分开实施的原因。至少读the javadoc了解重构前的原因。感谢家中指出这一点。

+0

应该可能已经知道了。谢谢! – aspartame

1

Type是由Class实现的接口,所以你可以完全摆脱第二种方法。

+0

'Class'是一个类,所以技术上'Type'不是一个超级接口,它只是实现它。 –

+0

不,'fromJson'方法被重载以接受类或类型对象。由于java不会在参数的动态类型上进行分派,因此总会调用带''类型'参数的重载。 –

+0

@Kublai Khan - 谢谢..我会编辑我的答案。 – Kal