Нужно сделать параметризованный класс, хранящий массив, с некоторой функциональностью 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();
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости