java java.lang.reflect.Array.getLength против array.length - PullRequest
2 голосов
/ 20 октября 2011

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

java.lang.reflect.Array.getLength(anArray) а также anArray.length

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

Спасибо!

Ответы [ 2 ]

8 голосов
/ 20 октября 2011

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

6 голосов
/ 20 октября 2011

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...