JAVA 調用泛型參數的靜態方法


今天碰到了這么一個問題,我用HttpClient訪問第三方接口的時候出現了第三方接口返回值不統一的情況。

舉例說明:

當訪問A接口的時候,返回值用  JSONObject.parseObject("返回的String") 解析沒問題。

但是當B接口的時候,返回值用  JSONObject.parseObject("返回的String") 就報錯了,用 JSONArray.parseArray("返回的String") 解析沒問題。(用JSONObject.parseArray("返回的String")也不行哦~)

眾所周知,HttpClient我們通常會把他封裝成一個工具類,工具類應保持開閉原則(雖然這里只是一個簡單的工具類,沒有使用設計模式,嘿嘿嘿),所以這就否定了在工具類中單獨加一個方法來適應返回值為JSONArray.parseArray的業務。

 

解決思路:因為 JSONObject 與 JSONArray 本是一家子,都是 com.alibaba.fastjson 包下的,並且共同是 JSON的子類,所以可以使用泛型解決這個問題。

 

 

 

 

最終解決方案代碼:

 

@Test
public void test2() throws Exception{
JSONArray jsonArray = test(JSONArray.class);
System.out.println(jsonArray);
}

/**
*
* @param T 你要選擇的解析結果的類
* @return
* @throws Exception
*/

private <T extends JSON> T test(Class<T> T) throws Exception{
    String params = "你HttpClient返回回來的String結果";
String name = T.getName();
Class<?> threadClazz = Class.forName(name);
Method method = threadClazz.getMethod("parseArray", String.class);
Object resultObj = method.invoke(null,params);
return (T)resultObj;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM