检查对象是否为Matrix

时间:2017-07-20 13:48:35

标签: java reflection

我需要测试Object是Matrix还是Array。

例如,我有:

String[] array;
String[][] matrix;

我正在使用:

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

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

我无法使用instanceof,因为它可以是任何对象的矩阵。

1 个答案:

答案 0 :(得分:5)

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

因此,要确定是否至少有两个数组级别,您要问的问题是:“这个类是一个数组,它的组件类也是一个数组。”在Java中:

clazz.isArray() && clazz.getComponentType().isArray()

要确定是否有两个(因此它不是N维数组,对于N> 2):

clazz.isArray() && clazz.getComponentType().isArray()
  && !clazz.getComponentType().getComponentType().isArray()