Скажем, у нас есть переменная типа IntFunction
, которая возвращает целочисленный массив:Как работают ссылки на конструкторы массива Java 8?
IntFunction<int[]> i;
С Java 8 дженериков, можно инициализировать эту переменную со ссылкой конструктора, как это:
i = int[]::new
Как компилятор Java переводит это на байт-код?
Я знаю, что для других типов, как String::new
, он может использовать invokedynamic
инструкцию, которая указывает на конструктор струнного java/lang/String.<init>(...)
, который является только метод с особым смыслом.
Как это работает с массивами, видя, что существуют специальные инструкции для построения массивов?
В Java, они называются ссылки, а не указатели. Обычно ссылки предоставляют почти все операции указателя, за исключением того, что вы не можете добавить произвольное смещение к ссылке или выполнять другие виды математических операций над ними. –