在输出方法

时间:2015-10-26 21:57:48

标签: java arrays object generics

方法: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[] ...

我该怎么做?

1 个答案:

答案 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)

请注意,如果方法需要填充数组,则每个数据块都会填充不同的值:false0null,具体取决于类型。

您可能还希望检查其他原始处理实用程序库,例如Guava,它具有类,例如:

com.google.common.primitives.Ints
com.google.common.primitives.Longs