Если у меня есть общий класс Foo<Bar>, мне не разрешено создавать массив следующим образом:
Bar[] bars = new Bar[];
(Это приведет к ошибке "Невозможно создать общий массив Bar" ).
Но, как было предложено dimo414 в ответе на этот вопрос (Java: как создать Generic Array), я могу сделать следующее:
Bar[] bars = (Bar[]) new Object[];
(Это будет "только" генерировать предупреждение: "Тип безопасности: снят флажок с объекта [] на бар []" ).
В комментариях к ответам dimo414 некоторые люди утверждают, что использование этой конструкции может вызвать проблемы в определенных ситуациях, а другие говорят, что это нормально, поскольку единственная ссылка на массив - bars, которая уже имеет нужный тип.
Я немного запутался, в каких случаях это нормально, и в каких случаях это может вызвать у меня проблемы. Комментарии newacct и Aaron McDaid, например, кажутся прямо противоречащими друг другу. К сожалению, поток комментариев в исходном вопросе просто заканчивается без ответа "Почему это" уже не правильно "?", Поэтому я решил задать для него новый вопрос:
Если bars -array только когда-либо содержит записи типа Bar, могут ли быть какие-либо проблемы во время выполнения при использовании массива или его записей? Или это единственная опасность, что во время выполнения я мог технически применить массив к чему-то другому (например, String[]), что позволило бы мне заполнить его значениями, отличными от Bar?
Я знаю, что вместо Array.newInstance(...) можно использовать Array.newInstance(...), но я специально интересуюсь конструкцией литья типов выше, поскольку, например, в GWT newInstance(...) -option недоступен.