2017-07-20 10 views
1

オブジェクトが行列か配列かどうかをテストする必要があります。例えばオブジェクトが行列であるかどうかを確認します

私が持っている:(私の実行のほぼ10%を

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

をしかし非常に遅いので、私はclazz.getSimpleName()を使用したくない:

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

私が使用しています時間はJProfilerに従って)、オブジェクトが行列であるかどうかをテストする別の方法はありますか?

インスタンスの使用はできません。なぜなら、オブジェクトの行列である可能性があるからです。

+4

***しかし、私はしたくありませんclazz.getSimpleName()を使用してください***あなたのために穏やかに開発されたoracleを使用しないようにする特別な理由はありますか? –

+0

'instanceof'を使用しますか? –

+0

なぜdownvote? – Alvins

答えて

5

clazzがFooの配列である場合、(a)clazz.isArray()はtrueを返し、(b)clazz.getComponentType()はFoo.classを返します。

少なくとも2つの配列レベルがあるかどうかを調べるには、質問したい質問があります。「このクラスは配列であり、コンポーネントクラスでも配列です。」あるかどうかを調べるには

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

丁度2(それはNのためのN次元配列、ではありません> 2):Javaでは

clazz.isArray() && clazz.getComponentType().isArray() 
    && !clazz.getComponentType().getComponentType().isArray() 
関連する問題