Вот что я пытаюсь сделать:
import java.lang.reflect.*;
class exampleOuter <T extends Number>
{
private exampleInner<T>[] elements;
public exampleOuter(Class<T> type, int size)
{
elements = (exampleInner<T>[]) Array.newInstance(type, size);
}
}
Мне сказали, что если я хочу создать универсальные массивы типа T, я должен использовать
elements = (T[]) Array.newInstance(type,size);
Поэтому я попытался расширить это до своего пользовательского класса и получил ClassCastException (Ljava.lang.Double; не может быть приведен к L mypackagename .exampleInner; я объявляю класс в main следующим образом:
exampleOuter<Double> test = new exampleOuter(Double.class,15);
Я могу очень хорошо объявить внутренний класс, а также я могу объявить массивы, которые не являются общими для innerClass, поэтому я представляю, что это что-то в конструкторе externalClass. Есть идеи?
EDIT:
Я понимаю, в чем проблема. Когда я создаю новый экземпляр массива, я создаю массив значений типа double, а не exampleInner. Я думаю. Если это так, мне нужно найти способ создать массив exampleInner, передав в функцию только Double.class.
РЕДАКТИРОВАТЬ 2:
Я понимаю, что универсальные массивы не безопасны для типов, но я все равно должен их использовать, потому что мой учитель требует, чтобы мы их использовали.
РЕДАКТИРОВАТЬ 3:
Мне сказали, что для использования универсальных массивов я должен был распределить их таким образом, и для этого мне нужны размышления, я думаю. Компилятор говорит мне, что класс использует небезопасные или непроверенные операции, но я должен использовать универсальные массивы, и я знаю, как это сделать. Если есть лучший способ, я поменяю код.