2015-02-11 55 views
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; 
    } 
} 
+0

对于原始类型,您不能,您需要复制/粘贴。 – 2015-02-11 23:24:34

+0

你是什么意思阅读教程? @KickButtowski 有没有你推荐的教程,因为我试图寻找到处可能,并没有什么是 – Moe 2015-02-11 23:24:43

+0

谷歌泛型Java教程。 – 2015-02-11 23:25:47

回答

0

我希望这个“变通方法”是配不上你:

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

} 
+0

问题在于它引入了类型装箱,与原始类型相比,性能下降。 – Lesleh 2015-02-12 03:15:53

+0

还有其他问题......如果性能真的是一个需要考虑的问题,那么可能应该对这个数组处理程序进行检查和重写。 有一些空间来改善代码。我只是想方设法让这个人处理他/她想要的任何事情。 – vianna77 2015-02-12 03:22:43

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