Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建通用数组_Java_Arrays_Generics - Fatal编程技术网

Java 如何创建通用数组

Java 如何创建通用数组,java,arrays,generics,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) {

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

目前,我有它的长型工作

如果可能的话,我希望它适用于任何类型

目前的执行情况:

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;
    }
}
公共类阵列处理器
{
公共静态长[]添加(长[]arr,长值)
{
long[]newarr=新长[arr.length+1];
如果(arr.length==0)
{
newarr[0]=值;
}
其他的
{
对于(int i=0;i
我希望这个“解决方案”对您来说足够好:

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;
    }

}
公共类测试{
公共静态void main(字符串[]args){
Long theLong=新Long(1234);
Integer theInteger=新整数(421);
Number[]myArray=null;
myArray=add(myArray,theLong);
myArray=add(myArray,Integer);
System.out.println(myArray[0]);
System.out.println(myArray[1]);
}
公共静态编号[]添加(编号[]arr,编号值){
编号[]newarr=null;
如果(arr==null | | arr.length==0){
newarr=新编号[1];
newarr[0]=值;
}否则{
对于(int i=0;i
您可以使用一个方法来处理使用反射的所有类型的数组,但您必须失去类型安全性(基元数组类型和引用数组类型的唯一超类型是
对象
):


对于基本类型,您不能,您需要复制/粘贴。阅读本教程是什么意思@KickButtowski有你推荐的教程吗?我试着到处寻找,但没有找到Google通用Java教程。不,不是针对基本类型的。您可以复制/粘贴以为每个基元类型生成重载,还可以为引用数组类型构建通用实现。附带说明:您可以删除
if
分支,这是不必要的。如果
arr
为空,则将跳过循环,并且
newarr[arr.length]=值在第一个索引上插入值。问题是它引入了类型装箱,与基元类型相比性能降低。还有其他问题。。。如果性能确实是一个需要考虑的问题,那么可能应该检查并重写这个数组处理程序。代码还有一些改进空间。我只是想让这个人做他/她想做的任何事情。
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;
    }
}