Вызывается ли конструктор объекта при создании массива в Java? - PullRequest
8 голосов
/ 24 января 2009

В Java массив является объектом. Мой вопрос ... вызывается ли конструктор Object при создании новых массивов? Мы хотели бы использовать этот факт для оснащения конструктора объекта дополнительным байт-кодом, который проверяет длину создаваемого массива. Будет ли это работать?

Ответы [ 5 ]

6 голосов
/ 24 января 2009

Согласно спецификации JVM : «Массивы создаются и обрабатываются с использованием отдельного набора инструкций». Таким образом, хотя массивы являются экземплярами Objects, они не инициализируются так же, как другие объекты (что вы можете увидеть, прокручивая этот ссылочный якорь вверх).

1 голос
/ 15 июня 2014

Что касается спецификации языка Java, хотя оба используют ключевое слово new, выражения создания экземпляра класса и выражения создания массива - это разные формы выражения, каждая из которых имеет свои правила. В описании выражений создания массива не упоминается вызов конструктора.

0 голосов
/ 24 января 2009

Неа. Я нашел это в списке рассылки AspectJ: http://dev.eclipse.org/mhonarc/lists/aspectj-users/msg02975.html.

Вы, вероятно, по какой-то причине спрашиваете о массивах, но если можете, почему бы не перейти на классы коллекций. Это даст вам много возможностей для перехвата и проверки.

0 голосов
/ 24 января 2009

Вы можете использовать манипуляцию с байтовым кодом для установки проверки при создании нового массива.

0 голосов
/ 24 января 2009

Я так не думаю, потому что вы не можете получить собственный массив для переопределения конструктора

...