0

我正在使用org.apache.commons.lang3.reflect.TypeUtils和jackson库来处理对象反序列化。</p>

使用以下代码可以很好地处理一层嵌套的泛型类型。

            final Result<R> ret = mapper.readValue(reader, new TypeReference<>() {
                @Override
                public java.lang.reflect.Type getType() {
                    return TypeUtils.parameterize(Result.class, req.clazz);
                }
            });

但我不确定如何处理像Result<T<R>>.

我可以用来TypeUtils.parameterize(Result.class, T, R)表示Result<T, R>TypeUtils.parameterize(Result.class, TypeUtils.parameterize(T, R))Result<T<R>

4

1 回答 1

0

Map<String, Integer>

Type mapOfStringsToIntegers =
  TypeUtils.parameterize(Map.class, String.class, Result.class);

List<List<String>>

Type listOfStrings = TypeUtils.parameterize(List.class, String.class);
Type listOfListOfStrings = TypeUtils.parameterize(List.class, listOfStrings);

看起来很简单。

我认为您在这里没有最佳地使用杰克逊。Java 是高度标称的。你不想要一个Map<String, List<List<Integer>>>. 您想要创建一个简单的、非参数化的类,该类准确地描述了您想要发送或接收的 XML 或 JSON,然后只提供它。然后杰克逊会照顾它。如果必须,请在该类中有一个字段,例如 a List<List<String>>- jackson 可以不费吹灰之力地找出字段。不需要 apache 的TypeUtils.

于 2022-01-16T15:33:59.767 回答