检查对象是否为Matrix

Alv*_*ins 1 java reflection

我需要测试一个Object是Matrix还是Array.

比如我有:

String[] array;
String[][] matrix;
Run Code Online (Sandbox Code Playgroud)

我正在使用:

private boolean isVector(Class<?> clazz) {
    return clazz.isArray();
}
private boolean isMatrix(Class<?> clazz) {
    return clazz.getSimpleName().endsWith("[][]");
}
Run Code Online (Sandbox Code Playgroud)

但我不想使用,clazz.getSimpleName()因为非常慢(根据JProfiler,我的执行时间的近10%),是否有另一种方法来测试Object是否是一个矩阵?

我不能使用instanceof,因为它可以是任何对象的矩阵.

ysh*_*vit 5

如果clazz是一个Foo数组,则(a)clazz.isArray()将返回true,(b)clazz.getComponentType()将返回Foo.class.

因此,要查明是否至少有两个数组级别,您要问的问题是:"这个类是一个数组,它的组件类也是一个数组." 在Java中:

clazz.isArray() && clazz.getComponentType().isArray()
Run Code Online (Sandbox Code Playgroud)

要找出是否有两个(所以它不是N维数组,N> 2):

clazz.isArray() && clazz.getComponentType().isArray()
  && !clazz.getComponentType().getComponentType().isArray()
Run Code Online (Sandbox Code Playgroud)