Невозможно инвертировать массив, не зная типов.
Рассмотрим, что значит обратить массив. Мы хотим поменять местами первый и последний элемент, второй и второй на последний элемент и т. Д.
[0, 1, 2, 3] => [3, 2, 1, 0]
Это работает, потому что мы знаем размер каждого элемента. На самом деле данные существуют как единицы и нули.
Мы можем поменять местами первый и последний элемент, только если знаем, насколько велик первый и последний элемент.
// Element size is 3 bits
[000, 001, 010, 100] => [100, 010, 001, 000]
Не зная размера каждого элемента, невозможно узнать, где останавливается первый элемент и что следует поменять местами.
// Unknown element size
000001010100
// Element size 1
[0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0] => [0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0]
// Element size 2
[00, 00, 01, 01, 01, 00] => [00, 01, 01, 01, 00, 00]
// Element size 4
[0000, 0101, 0100] => [0100, 0101, 0000]
Типы определяют, сколько битов образуют один элемент (например, int может быть 32-битным, а long - 64-битным).
Не зная типа, невозможно узнать размер элемента и не зная размера элемента, невозможно перевернуть список.