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