Jak znaleźć długość wielowymiarowej tablicy z refleksją nad java?Wielowymiarowe odbicie długości tablicy java
Odpowiedz
Macierze Java mają długości na wystąpienie, nie wszystkie tablice w tym samym wymiarze muszą mieć równe długości. Powiedział, że możesz uzyskać długości instancji w.
Wymiary można policzyć po numerze "[" w ich nazwie, jest to szybsze niż zstępowanie w hierarchii typów. Poniższy kod:
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);
}
}
daje następujący wynik:
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);
Użyj java.lang.reflect.Array.getLength(obj)
.
ale to daje mi tylko długość tablicy wymiarów ... –
Tablice wielowymiarowe są tablicami tablic. getLength zwróci rzeczywiście rozmiar jednej tablicy, ale teraz znasz rozmiar tablicy zawierającej. Używając pętli od 0 do znalezionej długości - 1, możesz zastosować getLength na każdym elemencie tej pierwszej tablicy i znaleźć inne rozmiary. –
Nie ma czegoś takiego jak "długość" dla tablicy wielowymiarowej; może nie być prostokątny. Zgaduję, że mówisz o liczbie wymiarów. Musisz zejść do niego iteracyjnie i liczyć.
public int getDimensionCount(Object array) {
int count = 0;
Class arrayClass = array.getClass();
while (arrayClass.isArray()) {
count++;
arrayClass = arrayClass.getComponentType();
}
return count;
}
Najpierw musisz sprawdzić, czy 'Tablica obiektów' jest tablicą. –
Nie, ponieważ pętla while sprawdza dla ciebie - jeśli jest to tablica, metoda po prostu zwróci 0. – skeggse
Jeśli lubisz mnie staraliśmy się uzyskać liczbę wymiarów i wielkości nich następnie:
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. wielowymiarowe tablicy sortując ciąg
- 2. Uzyskiwanie długości dwuwymiarowej tablicy
- 3. Uzyskiwanie długości tablicy "nazwanej"?
- 4. Odbicie Java - wpływ setAccessible (true)
- 5. java.lang.OutOfMemoryError: PermGen przestrzeń: Java odbicie
- 6. Odbicie java 8 nie działa
- 7. zmiany długości tablicy w openjdk
- 8. Wielowymiarowe każdy
- 9. Tablice wielowymiarowe przydzielone przez calloc
- 10. Java Singleton - zapobiec wielokrotnemu tworzeniu poprzez odbicie
- 11. Java: statyczne zagnieżdżone klasy i odbicie: "$" vs "."
- 12. Java Security Manager całkowicie wyłącza odbicie
- 13. java dostęp Integer konstruktor przez odbicie
- 14. Wysokowydajne tablice wielowymiarowe w C++
- 15. AppBarLayout.onCreateDrawableState NullPointerException: Próba uzyskania długości tablicy pustej
- 16. zmiennej długości tablica złożona do stałej tablicy
- 17. Inicjalizacja tablicy numpy o nieznanej długości
- 18. NullPointerException - Próba uzyskania długości tablicy zerowej (readDirectory())
- 19. uzyskać długość tablicy ciągów o nieznanej długości
- 20. Dodawanie tablicy SIMD dla dowolnych długości tablic
- 21. Podział ciąg do tablicy ciągów równych długości
- 22. Wspólne makro długości tablicy dla C?
- 23. "Nie można odtworzyć" - czy możliwe jest wielowymiarowe oznaczanie Java?
- 24. Szablony wielowymiarowe Tablica wielowymiarowa
- 25. wielowymiarowe list w C#
- 26. Wielowymiarowe std :: array
- 27. PowerShell Tablice wielowymiarowe
- 28. tablice wielowymiarowe w awk
- 29. Wielowymiarowe wektor inicjujący
- 30. Wielowymiarowe tablice w Bash
blisko, ale nadal muszę znać "liczbę" wymiarów, które macie ... –
Widzę, co mówisz. Można utworzyć metodę, która może zostać wywołana z tej klasy, która zwróci liczbę wymiarów. Jeśli nie możesz zmodyfikować tej klasy, nie jestem pewien. – amischiefr