Comment puis-je trouver la longueur d'une matrice multidimensionnelle avec réflexion sur Java? p>
5 Réponses :
Class clazz = Class.forName("ReflectionTest"); Method m = clazz.getDeclaredMethod("getArray"); Object o1 = m.invoke(o, arg); int array[][] = (int[][])o1; System.out.println("Array length: " + array.length); System.out.println("Array length: " + array[0].length);
J'entends ce que vous dites. Vous pouvez créer une méthode pouvant être invoquée à partir de cette classe qui retournera le nombre de dimensions. Si vous ne pouvez pas modifier cette classe, je ne suis pas sûr.
Utiliser java.lang.reflect.array.getlength (obj) code>. p>
Les tableaux multidimensionnels sont des matrices de matrices. GetLength reviendra en effet la taille d'un tableau, mais vous connaissez maintenant la taille de la matrice contenant. En utilisant une boucle de 0 à la longueur trouvée - 1, vous pouvez appliquer la getLength sur chaque élément de ce premier tableau et découvrir les autres tailles.
Il n'y a pas de "longueur" pour une matrice multidimensionnelle; Il peut ne pas être rectangulaire. Je suppose que vous parlez du nombre de dimensions. Vous devez descendre de manière itérative et compter.
public int getDimensionCount(Object array) { int count = 0; Class arrayClass = array.getClass(); while ( arrayClass.isArray() ) { count++; arrayClass = arrayClass.getComponentType(); } return count; }
Vous devez d'abord vérifier si Array d'objet code> est un tableau.
Vous ne le faites pas, car la boucle tandis que la boucle vérifie pour vous - s'il s'agit d'une matrice, la méthode va simplement renvoyer 0.
Les matrices Java ont des longueurs par instance, toutes les tableaux dans la même dimension doivent avoir des longueurs égales. Cela dit, vous pouvez obtenir les longueurs des instances dans la.
Les dimensions peuvent être comptées par le nombre de '[' dans leur nom, il est plus rapide que de descendre la hiérarchie de type. Le code suivant: p> donne la sortie suivante: p>
Si vous aimez que j'ai essayé d'obtenir le nombre de dimensions et de la taille d'eux, alors:
private static int[] getDimentionsOf(final Object expectedArray) { if (!expectedArray.getClass().isArray()) { return new int[0]; } final int dimensionSize = Array.getLength(expectedArray); final int[] innerDimensions = (expectedArray.getClass().getComponentType().isArray()) ? getDimentionsOf(Array.get(expectedArray, 0)) : new int[0]; final int lenghtPlusOne = innerDimensions.length + 1; final int[] newDimensions = new int[lenghtPlusOne]; System.arraycopy(innerDimensions, 0, newDimensions, 1, innerDimensions.length); newDimensions[0] = dimensionSize; return newDimensions; }