Создание универсального массива в Java с помощью непроверяемого приведения типовJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Создание универсального массива в Java с помощью непроверяемого приведения типов

Сообщение Anonymous »

Если у меня есть общий класс Foo, мне не разрешено создавать массив следующим образом:

Код: Выделить всё

Bar[] bars = new Bar[];
(Это приведет к ошибке «Невозможно создать общий массив Bar»).

Но, как предложено dimo414 в ответ на этот вопрос (Java: создание универсального массива), я могу сделать следующее:

Код: Выделить всё

Bar[] bars = (Bar[]) new Object[];
(Это «только» выдаст предупреждение: «Безопасность типов: непроверенное приведение из Object[] в Bar[]»).

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

Я немного не понимаю, в каких случаях это нормально, а в каких случаях это может доставить мне неприятности. Например, комментарии newacct и Аарона МакДейда прямо противоречат друг другу. К сожалению, поток комментариев в исходном вопросе просто заканчивается вопросом без ответа: «Почему это «больше не правильно»?», Поэтому я решил создать для него новый вопрос:

Если массив bars содержит только записи типа Bar, могут ли возникнуть какие-либо проблемы во время выполнения при использовании массива или его записей? Или единственная опасность заключается в том, что во время выполнения я мог бы технически привести массив к чему-то другому (например, String[]), что затем позволило бы мне заполнить его значениями типа, отличного от Bar?

Я знаю, что вместо этого могу использовать Array.newInstance(...), но меня особенно интересует приведенная выше конструкция приведения типов, поскольку , например, в GWT опция newInstance(...) недоступен.

Подробнее здесь: https://stackoverflow.com/questions/178 ... -type-cast
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»