如何创建Generic Arrays

时间:2015-02-11 23:19:26

标签: java arrays generics

我有一个数组处理程序的实现,它接受一个数组并添加一个新的数组值。

目前我已经为长型工作了。

我想让它适用于任何类型,如果可能的话。

目前的实施:

public class ArrayHandler 
{
    public static long[] add(long[] arr, long value)
    {
        long[] newarr = new long[arr.length+1];
        if(arr.length == 0)
        {
            newarr[0] = value;
        }
        else
        {
            for(int i = 0 ; i < arr.length ; i++)
            {
                newarr[i] = arr[i];
            }
        }
        newarr[arr.length] = value;
        return newarr;
    }
}

2 个答案:

答案 0 :(得分:0)

我希望这&#34;解决方法&#34;对你来说已经足够了:

public class Test {

    public static void main(String[] args) {
        Long theLong = new Long(1234);
        Integer theInteger = new Integer(421);

        Number[] myArray = null;

        myArray = add(myArray, theLong);
        myArray = add(myArray, theInteger);
        System.out.println(myArray[0]);
        System.out.println(myArray[1]);
    }

    public static Number[] add(Number[] arr, Number value) {
        Number[] newarr = null;
        if (arr == null || arr.length == 0) {
            newarr = new Number[1];
            newarr[0] = value;
        } else {
            for (int i = 0; i < arr.length; i++) {
                newarr = new Number[arr.length + 1];
                newarr[i] = arr[i];
            }
            newarr[arr.length] = value;
        }
        return newarr;
    }

}

答案 1 :(得分:0)

你可以使用一个适用于所有类型数组的方法,但是你必须失去类型安全性(原始数组类型和参考数组类型的唯一超类型是Object):

import java.lang.reflect.Array;
public class ArrayHandler 
{
    public static Object add(Object arr, Object value)
    {
        Object newarr = Array.newInstance(arr.getClass().getComponentType(),
                                          Array.getLength(arr)+1);
        System.arraycopy(arr, 0, newarr, 0, Array.getLength(arr));
        Array.set(newarr, Array.getLength(arr), value);
        return newarr;
    }
}