我需要测试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,因为它可以是任何对象的矩阵。
答案 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()