嗨,谢谢你注意我的问题。我想编写一个可以被不同类型的数组使用的方法。但我的代码总是这样:
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;
}
这似乎是多余的,我对这种代码重复感到非常不舒服。有没有办法为各种数组编写搜索方法,以避免在这种情况下重复?谢谢!
答案 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()
。 (除非您知道该值始终为char
或int
),否则:
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,因为在类型检查时会编译错误。