JAVA 调用泛型参数的静态方法
2023-09-14 09:12:20 时间
今天碰到了这么一个问题,我用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;
}
相关文章
- Java应用线上问题排查的常用工具和方法
- JAVA 注解教程(四)Java 预置的注解
- Java实现 LeetCode 592 分数加减运算(纯体力活)
- Java实现WUST 1002: 哈夫曼树
- Java实现LeetCode_0027_RemoveElement
- Java实现LeetCode_0026_RemoveDuplicatesFromSortedArray
- Java实现 蓝桥杯 历届试题 翻硬币
- Java实现 蓝桥杯 算法训练 出现次数最多的整数
- Java实现蓝桥杯 历届试题 合根植物
- Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
- 【JAVA】 04-Java中的多线程
- paip java.net.SocketException No buffer space available的解决办法及总结
- 华为OD机试 - 信道分配(Java & JS & Python)
- 【泛型】Java中的泛型,泛型类,泛型接口,泛型方法,泛型擦除
- 【java】Java 枚举(enum)如何使用以及原理
- 15个问题告诉你如何使用Java泛型
- Java中switch参数传null会引起异常——Java 语法糖
- 【Java用法】java 8两个List集合取交集、并集、差集、去重并集
- Java如何获取IP属地 ip2region failed to create searcher with x:java.io.FileNotFoundException:( 系统找不到指定的路径)
- Caused by: java.net.ConnectException: Connection refused: master/192.168.3.129:7077
- java-mybaits-00502-案例-映射分析-一对一、一对多、多对多
- 【java基础】泛型的限制及其继承规则