方法:Arrays.copyOfRange(arraySource, sourcePositionStart, sourcePositionStop)
允许我们使用特定的startPosition和stopPosition克隆arraySource
。
适用于任何类型的数组:int[]
,Integer[]
,double[]
,String[]
,...
所以我的问题是,如何编写类似的方法,例如我想写一些类似的东西:
int[] newArray1 = customCloneArray(oldArray, 0, oldArray.length);
所以我试过这个:
public static Object[] customCloneArray(
Object[] source, int sourcePositionStart, int sourcePositionStop) {
// We give the name of class of source like Double, String
//Class theClass = (source instanceof Class? (Class)source: source.getClass());
Object[] ouput = null;
try {
if(source instanceof String[]){
ouput = (String[])Arrays.copyOfRange(source, sourcePositionStart, sourcePositionStop);
}else if(source instanceof Integer[]){
ouput = (Integer[])Arrays.copyOfRange(source, sourcePositionStart, sourcePositionStop);
}else if(source instanceof Double[]){
ouput = (Double[])Arrays.copyOfRange(source, sourcePositionStart, sourcePositionStop);
}
} catch (java.lang.IllegalArgumentException e) {
e.printStackTrace();
}
return ouput;
}
这样的工作原理如下:
Integer[] newArray1 = (Integer[]) customCloneArray(oldArray, 0, oldArray.length);
String[] newArray2 = (String[]) customCloneArray(oldArray, 5, 10);
但我想以一般方式编写此方法,int[]
,double[]
...
我该怎么做?
答案 0 :(得分:0)
类java.util.Arrays
重载了基元的方法,因为它们不能与泛型一起使用,也不能转换为对象。
以下是copyOf
的方法签名。每种方法都是一种截然不同的方法。
copyOf(boolean[] original, int newLength)
copyOf(byte[] original, int newLength)
copyOf(char[] original, int newLength)
copyOf(double[] original, int newLength)
copyOf(float[] original, int newLength)
copyOf(int[] original, int newLength)
copyOf(long[] original, int newLength)
copyOf(short[] original, int newLength)
copyOf(T[] original, int newLength)
请注意,如果方法需要填充数组,则每个数据块都会填充不同的值:false
,0
或null
,具体取决于类型。
您可能还希望检查其他原始处理实用程序库,例如Guava
,它具有类,例如:
com.google.common.primitives.Ints
com.google.common.primitives.Longs