Java:编写可应用于任何类型数组的方法

时间:2018-05-23 16:32:45

标签: java arrays

嗨,谢谢你注意我的问题。我想编写一个可以被不同类型的数组使用的方法。但我的代码总是这样:

public int indexOf_1(int[] a,int b){
    //Find the first matched result and return, otherwise report -1
    int index = -1;
    for(int j=0;j<a.length;j++){
        if (a[j]==b) 
        {index=j;}
    }
    return index;
}

public int indexOfChar_1(char[] a,int b){
    //Consider merged to the previous method?
    int index = -1;
    for(int j=0;j<a.length;j++){
        if (a[j]==b) 
        {index=j;}
    }
    return index;
}

这似乎是多余的,我对这种代码重复感到非常不舒服。有没有办法为各种数组编写搜索方法,以避免在这种情况下重复?谢谢!

3 个答案:

答案 0 :(得分:3)

不幸的是,由于数组和JVM的工作方式,这不能减少。甚至泛型也无法提供帮助,因为int[]无法在没有明确转换的情况下安全地转换为Object[]

这看起来像一个常见的util函数。如果您对代码重复不满意,可以考虑使用提供此功能的众多库之一。 Guava和Commons-Lang是少数。

Guava将他们列入与primitive type相关的班级。 Commons-Lang在ArrayUtils班级

中安排他们

e.g。

Bytes.indexOf(byteArray, (byte) 2);
Ints.indexOf(intArray, 22);
ArrayUtils.indexOf(intArray, 6);

答案 1 :(得分:1)

您可以使用Object[],但您可能不想使用==,因为它会比较对象的标识而不是值,而您可能希望使用.equals()。 (除非您知道该值始终为charint),否则:

public int indexOf(Object[] a, int b) {
    int index = -1;
    for (int j = 0; j < a.length; j++) {
        if (a[j].equals(b)) {
            index = j;
        }
    }
    return index;
}

答案 2 :(得分:1)

public static <T> int index_Of(Object[] input,T value){
    //Find the first matched result and return, otherwise report -1
    for(int j=0;j<input.length;j++){
        if(input[j].equals(value))
            return j;
    }
    return -1;
}

您可以概括您处理所有类型数组的方法。但是,请注意型号。如果要使用Object引用基本类型,则在声明基本类型数组时,需要使用引用类型。例如,

Character [] a = new Character[]{'a','b','c'};

请勿使用char,因为在类型检查时会编译错误。