所以我想创建一个方法来验证两个数组的长度相同,如:
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)
也不起作用
你可以使用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)