java java.lang.reflect.Array.getLength vs. array.length

#java #arrays #reflection

#java #массивы #отражение

Вопрос:

Я должен поддерживать некоторый код, написанный кем-то другим, кто больше не работает в компании. Я вижу несколько ссылок на java.lang.reflect.Array.getLength(anArray) . Это работает, но я никогда не видел, чтобы отражение использовалось для получения длины массива. Кто-нибудь знает разницу между:

java.lang.reflect.Array.getLength(anArray) и anArray.length

Это просто синтаксический сахар?

Спасибо!

Ответ №1:

Если anArray это статически типизированный тип массива, вы должны использовать anArray.length (кстати, не вызов метода). Вы бы использовали форму отражения, если бы у вас была только ссылка на массив как Object .

Ответ №2:

Это трюк, позволяющий получить длину массива, будь то массив примитивов или массив объектов. Это позволяет написать метод, который работает с обоими типами массивов.

Рассмотрим метод, который печатает содержимое любого типа массива:

 void print(Object array) {
    for (int i = 0; i < Array.getLength(array); i  ) {
        System.out.println(Array.get(array, i));
    }
}
  

Это будет работать с параметрами int[] или Object[].

В противном случае вы должны просто использовать .статическое поле длины.