Как работает generic в get () ArrayList - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь разработать свой собственный класс ArrayList, который будет работать так же, как java.util.ArrayList.
У меня все в порядке с изменением размера и другими вещами. Я застрял, пытаясь получить свой объект из моегоArrayList.Во время вызова add(T data) можно добавить Object[index]. Но когда я пытаюсь get(index), мне нужно привести объект к типу T. В java.lang.ArrayList онине выполняет приведение типов.

Может ли кто-нибудь осветить?

transient Object[] elementData;
E elementData(int arg0) {
   return this.elementData[arg0];
}
public E get(int arg0) {
  this.rangeCheck(arg0);
  return this.elementData(arg0);
}

Как elementData() преобразует тип объекта в тип E?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Несмотря на то, что вы можете выполнить приведение перед возвратом, стоит просто объявить ваш массив как E[], что избавит вас от необходимости приводить:

transient E[] elementData;

E elementData(int arg0) {
    return this.elementData[arg0];
}

В дополнение к чистоте кода это также делает егодругим разработчикам ясно, что elementData не предназначен для любого типа данных, кроме E.

0 голосов
/ 13 декабря 2018

Они, конечно, делают приведение elementData[index] к E:

@SuppressWarnings("unchecked")
E elementData(int index) {
    return (E) elementData[index];
}

, вызываемому:

/**
 * Returns the element at the specified position in this list.
 *
 * @param  index index of the element to return
 * @return the element at the specified position in this list
 * @throws IndexOutOfBoundsException {@inheritDoc}
 */
public E get(int index) {
    rangeCheck(index);

    return elementData(index);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...