杰克逊的泛型用于阵列反序列化

时间:2016-09-15 08:34:38

标签: java generics jackson

我想使用泛型或不同的东西来重构以下方法。

public Double[] reverseDoubles() throws IOException {
    String sarray = get.array();
    Double[] array = mapper.readValue(sarray, Double[].class);
    return ArrayUtils.reverse(array);
}

public Long[] reverseLongs() throws IOException {
    String sarray = get.array();
    Long[] array = mapper.readValue(sarray, Long[].class);
    return ArrayUtils.reverse(array);
}

我希望将所有方法重构为只有一个具有以下签名的方法:

public <T> T[] reverse() throws IOException {
  ...
}

1 个答案:

答案 0 :(得分:1)

如果不接受reverse中的元素类型,则无法执行此操作。但是,如果您可以接受传递类型,则可以使用Array.newInstance在运行时创建所需的数组类:

public <T> T[] reverse(Class<T> elementType) throws IOException {
    String sarray = get.array();
    Class<?> arrayType = Array.newInstance(elementType, 0).getClass();
    T[] array = (T[]) mapper.readValue(sarray, arrayType);
    return ArrayUtils.reverse(array);
}