我是一个懒人,不想看见重复的代码,最近因为这个特点踩了一个坑
代码里少不了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不能用泛型。