2016-09-15 88 views
0

我想重构下面的方法使用泛型或不同的东西我不能拿出来。杰克逊的泛型为阵列反序列化

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 { 
    ... 
} 
+2

这是不可能的定签名。研究*类型擦除*。 – shmosel

回答

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); 
} 
+0

我会传递数组类型,并避免新的实例破解。 – shmosel