#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[].
В противном случае вы должны просто использовать .статическое поле длины.