如何 将 class<?> 转 TypeReference
时间: 2024-05-10 15:18:01 浏览: 11
将 class<?> 转成 TypeReference 可以使用 Jackson 提供的 TypeReference 类。具体代码如下:
```
TypeReference<?> typeRef = new TypeReference<>() {
@Override
public Type getType() {
return getClass();
}
};
ObjectMapper objectMapper = new ObjectMapper();
MyObject myObject = objectMapper.readValue(jsonString, typeRef);
```
这里的 MyObject 就是你要转换的对象类型,jsonString 是 JSON 字符串。
相关问题
我要你扮演一个软件工程师。现在我需要你仔细思考,以下代码存在一些问题,headClazz里面获取到的是空值,我想要headClazz能获取到值,我需要你指出代码错误,以及改正方法。代码如下:public class CommonReadListener<T> extends AnalysisEventListener<T> implements ReadListener<T> {private Class<T> headClazz;public CommonReadListener(Class<T> headClazz) { this.headClazz = headClazz; }
根据你提供的代码,我看不出 headClazz 获取空值的具体原因。但是,有几点需要注意的地方,可能会导致 headClazz 获取不到值。
1. 请确保传入 CommonReadListener 构造方法的 headClazz 参数非空。
2. 如果你使用的是泛型类(如本例中的 CommonReadListener<T>),则在运行时会出现类型擦除的问题。因此,如果 headClazz 是一个泛型类型,则不能直接使用 Class<T>.class 这种写法来获取其 Class 对象。你可以考虑把 headClazz 的类型传入 CommonReadListener 类的构造方法中,然后在构造方法中使用 TypeReference 来获取其 Class 对象。示例如下:
```
public class CommonReadListener<T> extends AnalysisEventListener<T> implements ReadListener<T> {
private Class<T> headClazz;
public CommonReadListener(TypeReference<T> typeReference) {
this.headClazz = typeReference.getType();
}
// ...
}
```
3. 如果你使用的是 Spring 等依赖注入框架来创建 CommonReadListener 实例,那么请确保 headClazz 被正确注入到了 CommonReadListener 实例中。有时候,注入的属性名与类中定义的属性名不一致,也会导致属性值为空的问题。
下面是使用fastjson写的代码` private <T> List<T> getArray(Object obj,Class<T> clazz){ String s = getJSONString(obj); return JSON.parseArray(s,clazz); } public <T> T getData(TypeReference<T> tTypeReference) { String s = this.getJSONString(this.getData()); return JSON.parseObject(s,tTypeReference); }`请将这个代码转为使用jsckson的
下面是使用jackson写的代码:
```
private <T> List<T> getArray(Object obj, Class<T> clazz) {
String s = getJSONString(obj);
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.readValue(s, mapper.getTypeFactory().constructCollectionType(List.class, clazz));
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
public <T> T getData(TypeReference<T> tTypeReference) {
String s = this.getJSONString(this.getData());
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.readValue(s, tTypeReference);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
```
需要注意的是,在 jackson 中,需要使用 `ObjectMapper` 对象来进行 JSON 解析,在解析 List 类型时,需要使用 `constructCollectionType` 方法来构造 List 类型的 TypeReference。