我是一个懒人,不想看见重复的代码,最近因为这个特点踩了一个坑
代码里少不了RestApiResponse例如下面的代码
@Data
public class RestApiResponse<T> {
private Integer code;
private String msg;
private T data;
private LocalDateTime timestamp = LocalDateTime.now();
}
最近突发奇想,想用下面这个方法把json数据反序列化的代码封装起来
public static <T> RestApiResponse<T> of(String json) {
return JSON.parseObject(json, new TypeReference<RestApiResponse<T>>() {});
}
然后,就发现,T的类型识别不了了
@Data
public class ParseJson {
Integer a;
public static void main(String[] args) {
String json = "{\"code\":0,\"msg\":\"success\",\"data\":{\"a\":1},\"timestamp\":\"2024-08-01 14:32:24\"}";
RestApiResponse<ParseJson> obj1 = RestApiResponse.of(json);
System.out.println(obj1.getData().getA());
// Exception in thread "main" java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.example.ParseJson
}
}
这里面的bug是,代码编译是可以的,但是一运行,就报ClassCastException
解决办法就是 别这么写了,com.alibaba.fastjson.TypeReference不能用泛型。