首页 > 解决方案 > 比较java中不同类型的数组大小

问题描述

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

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

问题是这种方法只适用于非原始数组。如果我想将char-Array 与另一个数组进行比较,这是行不通的。有没有办法在没有太多开销的情况下实现这个功能?

我已经试过了

<T,V> validateSameSize(T[] first, V[] second)

但是由于泛型也需要一个类并且不适用于原始类型,所以这不起作用。还

validateSameSize(Array first, Array second)

也不起作用

标签: javaarrays

解决方案


您可以使用Array#getLength

public static boolean sameSize(Object arrayA, Object arrayB) {
    return Array.getLength(arrayA) == Array.getLength(arrayB);
}

它将适用于非原始数组以及原始数组:

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

也不要忘记传递一个Object不是数组Array#getLengthIllegalArgumentException.

这段代码:

Object notArray = 100;
System.out.println(Array.getLength(notArray));

产生:

Exception in thread "main" java.lang.IllegalArgumentException: Argument is not an array

如果您需要在调用之前快速失败,Array#getLength您可以检查参数是否实际上是数组:

if (!object.getClass().isArray()) {
  // object is not array. Do something with it
}

推荐阅读