比较java中不同类型的数组大小

Sch*_*tky 7 java arrays

所以我想创建一个方法来验证两个数组的长度相同,如:

validateSameSize(Object[] first, Object[] second) {
   if (first.length != second.length) throw new Exception();
}
Run Code Online (Sandbox Code Playgroud)

问题是此方法仅适用于非原始数组.如果我想比较一个char-Array与另一个数组,这不起作用.有没有办法实现这个功能而没有太多的开销?

我已经尝试过了

<T,V> validateSameSize(T[] first, V[] second)
Run Code Online (Sandbox Code Playgroud)

但由于泛型也需要一个类而不能使用原始类型,因此这不起作用.也

validateSameSize(Array first, Array second)
Run Code Online (Sandbox Code Playgroud)

也不起作用

cac*_*co3 9

你可以使用Array#getLength:

public static boolean sameSize(Object arrayA, Object arrayB) {
    return Array.getLength(arrayA) == Array.getLength(arrayB);
}
Run Code Online (Sandbox Code Playgroud)

它将与非原始数组以及原始数组一起使用:

System.out.println(sameSize(new int[0], new int[100])); // false
System.out.println(sameSize(new char[0], new int[0])); // true
System.out.println(sameSize(new Object[0], new Object[0])); // true
System.out.println(sameSize(new Object[0], new List[0])); // true
Run Code Online (Sandbox Code Playgroud)

另外不要忘记传递一个Object不是数组的Array#getLength结果会导致IllegalArgumentException.

这段代码:

Object notArray = 100;
System.out.println(Array.getLength(notArray));
Run Code Online (Sandbox Code Playgroud)

生产:

Exception in thread "main" java.lang.IllegalArgumentException: Argument is not an array
Run Code Online (Sandbox Code Playgroud)

如果你需要在调用之前快速失败,Array#getLength你可以检查参数是否真的是数组:

if (!object.getClass().isArray()) {
  // object is not array. Do something with it
}
Run Code Online (Sandbox Code Playgroud)