如何在Java中将任何数组作为参数传递?

Ala*_*eet 7 java arrays parameters

如何编写一个接受任何类型的数组(包括基元)作为参数的方法?

例如,我希望以下两个调用都能正常工作:

int[] intArray = {1, 2, 3};
String[] strArray = {"1", "2"};

hasSize(intArray, 3);
hasSize(strArray, 2);
Run Code Online (Sandbox Code Playgroud)

我到目前为止最接近的是:

public static <T> boolean hasSize(T[] array, int expectedSize)
{
    return (array.length == expectedSize);
}
Run Code Online (Sandbox Code Playgroud)

...但这不适用于原语.

wer*_*ero 6

原始数组和不共享的对象数组是基类,除了Object.

因此,唯一的可能性是接受一个对象并在方法内检查它是否是一个数组

public static <T> boolean hasSize(Object x, int expectedSize)
{
    return (x != null) && x.getClass().isArray() ?
        java.lang.reflect.Array.getLength(x) == expectedSize :
        false;
}
Run Code Online (Sandbox Code Playgroud)

当然这也接受非数组,可能不是你想要的解决方案.

因此,JDK主要为对象数组和原始数组提供相同的方法.