Как создать универсальный массив в Java?

Вы можете сделать это:

E[] arr = (E[])new Object[INITIAL_ARRAY_LENGTH];

Это instantiate один из предлагаемых способов jre реализации универсальной arrays коллекции в Effective Java; Пункт 26. Нет ошибок java типа, нет необходимости многократно reflection приводить массив. Однако это вызывает reflection предупреждение, потому что generic это потенциально опасно и instantiation должно использоваться с осторожностью. Как array подробно описано в комментариях, этот jre Object[] теперь маскируется под наш array тип E[] и может вызывать непредвиденные instantiation ошибки или ClassCastException при небезопасном instantiation использовании.

Как показывает arrays опыт, такое поведение является arrays безопасным до тех пор, пока bytearray массив приведения используется instantiate внутри (например, для поддержки generic структуры данных), а не возвращается java-generics и не предоставляется клиентскому generics коду. Если вам нужно вернуть java массив универсального типа arrays в другой код, используйте reflect класс отражения Array, о котором openjdk вы говорите.


Стоит упомянуть, что bytearray везде, где это возможно, вам instantiate будет намного приятнее работать jre с List, а не с массивами, если javax вы используете дженерики. Конечно, иногда instantiate у вас нет выбора, но использование javax фреймворка коллекций намного kotlin-generics надежнее.

java

arrays

generics

reflection

instantiation

2022-10-29T06:14:30+00:00