Нужно сделать параметризованный класс, хранящий массив, с некоторой функциональностью ArrayList
в виде функций add(T el)
, remove(int index)
, get(int index)
.
Я пытаюсь в методах использовать ArrayList, но у меня возникает проблема, как потом сохранить полученный список в правильно параметризованный массив того типа, элемент которого мы получаем.
Код функции приведен частично.
static class DynamicArray<T> {
private T[] array;
public NewDynamicArray() {
}
public void add(T el) {
List<T> list = new ArrayList<>();
list.add(el);
array = (T[]) list.toArray( // здесь ошибка приведения
new DynamicArray[list.size()]
);
}
...
Если кратко - в Java такое невозможно: T[] array = new T[list.size()]
. Из-за стирания типов (type erasure) не получится создать массив обобщённого типа, будет создаваться Object[]
.
Внутри класса не хранится никакой информации о его типе-параметре. Эта информация доступна только на этапе компиляции и стирается (становится недоступной) в runtime. Это происходит по историческим причинам, чтобы не ломать совместимость со старым кодом.
Впрочем, давай пока не будем забегать очень далеко, может быть, решение на поверхности.
Например, есть библиотеки, в которых уже реализованы коллекции примитивных типов. Так же советую сформулировать задачу. Возможно, есть другие решения.
На страничке https://stackoverflow.com/questions/6522284/convert-a-generic-list-to-an-array этот вопрос уже был рассмотрен. Представлен даже хак с рефлексией, как обойти данное ограничение, но не советую его использовать, особенно в производстве.
Вы почему-то передаете как аргумент свой класс. Как метод может его преобразовать в массив?
Воспользуйтесь toArray()
без аргументов:
array = (T[]) list.toArray();
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
ввожу два числа, например, так: 1 + 2 (с пробелами)
На устройствах android 51 довольно часто вылезают ошибки, связанные со Snackbars
Приложение собираю при помощи @SpringBootApplication, стили получилось подключить в файле indexjsp