gpt4 book ai didi

java - 具有任意返回类型和 Jackson 序列化程序的 Java 中的通用方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:01:31 24 4
gpt4 key购买 nike

我正在使用 Jackson + ES 将 JSON 对象反序列化为 java POJO。我正在使用一个简单的方法来迭代 ElasticSearch 提供的 SearchResponse:

private List<MyPOJO> toObjects(SearchResponse searchResponse)
{
List<MyPOJO> _objects = new ArrayList<>();

for(SearchHit searchHit: searchResponse.getHits().hits()){
try {
MyPOJO _object = json.readValue(searchHit.source(), MyPOJO.class);
_objects.add(_object);
} catch (IOException e){
e.printStackTrace();
}
}

return _objects;
} // ND: json is a Jackson ObjectMapper instance.

考虑到我为每个 POJO 重用了很多这段代码,我试图转换它以接受任意类型而不是固定的 MyPOJO 类型。在Java中可能吗?我搜索了 Class< ? > 泛型类型和 T,但编译器总是给我错误。

最佳答案

你应该通过 Class<T> toObjects 的参数功能

private <T> List<T> toObjects(SearchResponse searchResponse, Class<T> clazz)

并添加clazzreadValue打电话

T _object = json.readValue(searchHit.source(), clazz);

这是一个简单的方法。

如果你真的必须在泛型上构建阅读器(class ResponseReader<T>),可以通过反射来实现,但你应该尽可能避免这种方式,因为它会导致非常复杂和脆弱的代码(和糟糕的表现)。

关于java - 具有任意返回类型和 Jackson 序列化程序的 Java 中的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28540036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com