2016-02-04 61 views
1

我想將我的previous post中的代碼抽象爲一個util類。這裏的UTIL類方法:Java方法參數和返回類對象

private static Gson gson = new GsonBuilder().create(); 

public static Class getResponseObject(String resourceResponse, String jsonObject, Class responseClass) { 
    JSONObject jsonResponse = new JSONObject(resourceResponse); 
    String jsonResponseToString = jsonResponse.getJSONObject(jsonObject).toString(); 
    return gson.fromJson(jsonResponseToString, responseClass.getClass()); 
} 

這是從另一個類調用:

UserIdentifier userIdentifier = ServiceClientUtil.getResponseObject(resourceResponse, 
                    "userIdentifier", 
                    UserIdentifier.class); 

但我發現了以下錯誤:

Error:(68, 76) java: incompatible types: java.lang.Class cannot be converted to app.identity.UserIdentifier 

如何傳遞一個類對象並返回相同的類對象?

+0

該錯誤信息已足夠清楚。你對此不瞭解什麼? – Raedwald

回答

2

我認爲在這種情況下你實際上想使用Class以外的東西。但要小心:只有將鍵值對(或其對象表示形式)序列化爲JSON值纔有意義,因爲原始Integer不是有效的JSON。

我們可以做的是更改您的方法的簽名以便接受任何對象,並且因爲可以鍵入Class,所以變得更容易。

你的方法的簽名會(未經測試):

public static <T> T getResponseObject(String resourceResponse, 
             String jsonObject, 
             Class<T> responseClass) 

通過這種方式,我們可以確保我們傳遞給此方法的類型是什麼,我們得到一個實例。記住:我不保證這種方法適用於像Integer這樣的扁平值,但它理想上適用於您創建的任何其他自定義對象。

+0

不,這不是我想要的,因爲我試圖使這是一個可重用的方法。所以我希望能夠傳遞任何類型的'responseClass'類並獲取返回的結果。例如,我應該能夠傳入'Integer.class'並獲取返回的結果。我只是使用'UserIdentifier'作爲例子 – Richard

+0

@Richard:我不認爲'Integer'會以你想要的方式工作,但我已經修改了我的答案。 – Makoto

+0

完美,這工作完全像我想要的。謝謝 – Richard