Comment trouver la longueur d'un tableau multidimensionnel avec réflexion sur Java?Réflexion de tableau de longueur multi-dimension java
Répondre
Les tableaux Java ont des longueurs par instance, tous les tableaux de la même dimension ne doivent pas avoir des longueurs égales. Cela dit, vous pouvez obtenir la longueur des instances dans le.
Les dimensions peuvent être comptées par le nombre de '[' dans leur nom, c'est plus rapide que de descendre la hiérarchie de type. Le code suivant:
int[][][] ary = {{{0},{1}}};
Class cls = ary.getClass();
boolean isAry = cls.isArray();
String clsName = cls.getName();
System.out.println("is array=" + isAry);
System.out.println("name=" + clsName);
int nrDims = 1 + clsName.lastIndexOf('[');
System.out.println("nrDims=" + nrDims);
Object orly = ary;
for (int n = 0; n < nrDims; n++) {
int len = Array.getLength(orly);
System.out.println("dim[" + n + "]=" + len);
if (0 < len) {
orly = Array.get(orly, 0);
}
}
donne le résultat suivant:
is array=true
name=[[[I
nrDims=3
dim[0]=1
dim[1]=2
dim[2]=1
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);
Utilisez java.lang.reflect.Array.getLength(obj)
.
mais cela me donne la longueur de ce tableau de dimension seulement ... –
Les tableaux multidimensionnels sont des tableaux de tableaux. getLength retournera en effet la taille d'un tableau, mais vous connaissez maintenant la taille du tableau contenant. En utilisant une boucle de 0 à la longueur trouvée - 1, vous pouvez appliquer getLength sur chaque élément de ce premier tableau et trouver les autres tailles. –
Il n'y a pas de "longueur" pour un tableau multidimensionnel; Ce n'est peut-être pas rectangulaire. Je suppose que vous parlez du nombre de dimensions. Vous devez y descendre itérativement 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 'Object array' est un tableau. –
Ce n'est pas le cas, car la boucle while vérifie pour vous - s'il s'agit d'un tableau, la méthode retournera simplement 0. – skeggse
Si vous me voulez essayions d'obtenir le nombre de dimensions et de la taille d'entre 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;
}
- 1. réflexion Java, obtenir tableau de chaînes de classe
- 2. Tableau de longueur
- 3. Itération via un tableau Java de longueur variable
- 4. Obtenez longueur de tableau de chaînes de longueur inconnue
- 5. réflexion .NET et un tableau
- 6. longueur de calcul du tableau
- 7. Tableaux de longueur variable (dynamique) en Java
- 8. Java. Instance de longueur variable
- 9. Quota maximal de longueur de tableau
- 10. Tableau de BitArrays de longueur fixe
- 11. Java Génériques et réflexion!
- 12. java réflexion question
- 13. Réflexion en Java?
- 14. RMI + réflexion java
- 15. réflexion java? s'étend
- 16. matlab: recherche d'une longueur d'un tableau d'objets Java
- 17. Utilisation du tableau de longueur nulle
- 18. Longueur de ligne égale dans un tableau
- 19. Tableau bidimensionnel de longueur variable dans Cobol
- 20. Trouver la longueur de tableau 2D?
- 21. Comment obtenir la longueur du tableau de pointeurs C?
- 22. Longueur de la chaîne en twips java
- 23. Réflexion en classe java générique
- 24. Annoncer la longueur d'un tableau
- 25. Valeur de la clé de longueur de tableau JavaScript
- 26. Limitation de longueur de chaîne de fichier de propriété (JAVA)
- 27. Tableau de ArrayList Java
- 28. Problèmes de tableau Java
- 29. Dépassement de longueur de tableau variable en C++?
- 30. retourner un tableau de chaînes de longueur variable
près, mais encore faut-il connaître le "nombre" de dimensions que le tableau a ... –
Je vois ce que vous dites. Vous pouvez créer une méthode pouvant être invoquée à partir de cette classe qui renverra le nombre de dimensions. Si vous ne pouvez pas modifier cette classe, je ne suis pas sûr. – amischiefr