зачем преобразовывать тип в массив объектов в конструкции ArrayList? - PullRequest
8 голосов
/ 15 декабря 2011
  public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)
    elementData = Arrays.copyOf(elementData, size, Object[].class);
}

код является конструкцией java.util.ArrayList.Вы можете проверить детали ошибки 6260652, здесь http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6260652

Мой вопрос: если я не конвертирую тип, какая проблема произойдет?Потому что я думаю, что все в порядке, если elementData ссылается на массив subType.

1 Ответ

12 голосов
/ 15 декабря 2011

Вот пример того, что может пойти не так без рассматриваемого преобразования:

List<Object> l = new ArrayList<Object>(Arrays.asList("foo", "bar"));

// Arrays.asList("foo", "bar").toArray() produces String[], 
// and l is backed by that array

l.set(0, new Object()); // Causes ArrayStoreException, because you cannot put
                        // arbitrary Object into String[]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...