杰克逊的泛型为阵列反序列化
问题描述:
我想重构下面的方法使用泛型或不同的东西我不能拿出来。杰克逊的泛型为阵列反序列化
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 {
...
}
答
你无法不接受在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);
}
+0
我会传递数组类型,并避免新的实例破解。 – shmosel
这是不可能的定签名。研究*类型擦除*。 – shmosel