类型擦除名词解释与存在问题
当我们使用Java的泛型时,编译器会在编译时执行类型擦除。类型擦除是指编译器会将泛型类型转换为其原始类型,以便在运行时使用。例如,List<String>将被转换为List<Object>,在运行时不再有类型参数。这种类型擦除的机制导致在反序列化时,我们无法获取实际的泛型类型信息,而只能得到原始类型,这就是类型擦除所带来的问题。
听起来很懵,没关系,看一下例子你就知道了。
案例
1. 泛型类 ApiResponse
package org.example.springboot.job.domain;
import lombok.Data;
public class ApiResponse<T> {
private int code;
private String message;
private T data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {

文章解释了Java中泛型的类型擦除机制,即在编译期间将泛型转换为原始类型,导致在运行时无法获取实际的泛型信息。这在反序列化时成为一个问题,如示例所示,当尝试将JSON转换为`ApiResponse<User>`时,如果不指定类型信息,Gson会默认转换为`LinkedTreeMap`。为解决此问题,文章推荐使用Gson的`TypeToken`或fastjson的`TypeReference`来保留类型信息,确保正确反序列化。

654

被折叠的 条评论
为什么被折叠?



