Я знаю, что есть похожий вопрос , но ответ говорит мне, как это сделать, но не причина. И у меня есть другой способ создать, но я не знаю почему
public class testForGeneric<T> {
public testForGeneric(T[] a) {
int len = a.length;
Node<T>[] nodes = new Node<T>[len];//THE PROBLEM!
for (int i = 0; i < len; i++)
nodes[i] = new Node<>(a[i], i);
}
public static void main(String[] args) {
Integer[] a = { 3, 2, 4 };
testForGeneric<Integer> t = new testForGeneric<>(a);
}
}
Ошибка в строке проблемы:
Невозможно создать универсальный массив узлов
Пробная версия и вопрос
Если вы измените строку на Node<T> nodes = new Node[len]
, это будет правильно.Но вы получите предупреждение:
Безопасность типов: выражение Node [] нуждается в непроверенном преобразовании для соответствия Node []
Я не знаю почемуэто правильно. Узел [len] похож на обычный массив. И из предупреждения почему Node[]
может преобразовываться в Node<T>[]
?
и почему элемент в массиве должен инициализироваться с Node<>()
?
и если вы используете Object
приведение массива к массиву Node<T>[]
, это тоже неправильно.
Node.java
:
public class Node<T> {
public T val;
public int index;
public Node(T val, int index) {
this.index = index;
this.val = val;
}
public Node() {
}
}
ЭТОПРОСТО ИСПЫТАНИЕ НА ОБЩУЮ СИСТЕМУ
Я хочу знать, почему это правильно или неправильно.