使用原始类型作为通用对象

时间:2012-07-09 08:55:58

标签: java arrays generics primitive-types

我有一个从数组中检索元素的方法,我想对几种基本类型使用相同的方法(int [],double [],...)。方法如下:

public static int[] getElementsFromTo(int[] data,int from, int to){
    int[] selectedData = new int[to-from];
    for (int idx = from; idx < to; idx++){
        selectedData[idx-from]=data[idx];
    }
    return selectedData;
}

我看过一些类似问题的帖子,但我找不到一个好的答案,或者至少理解它。最接近的响应是在此帖子中Java Generic Primitive type n-d array

有人建议使用Object [],然后在运行时获取原始类型,但我不知道如何。我猜方法的签名看起来类似于:

public static Object[] getElementsFromTo(Object[] data,int from, int to)

但是如何获取 data 的类型以使用正确的原始类型实例化 selectedElements 数组?

很多谢谢

1 个答案:

答案 0 :(得分:5)

您可以达到的最接近的是使用以下

@SuppressWarnings("unchecked")
public static <A> A copyOf(A array, int from, int to) {
    int len = to - from;
    A a = (A) Array.newInstance(array.getClass().getComponentType(), len);
    System.arraycopy(array, from, a, 0, len);
    return a;
}

这将复制原始和非原始数组类型的数组,但使用反射来完成它。