Ах, Java-массивы и дженерики, как я тебя ненавижу.
Хотя использование списков определенно решит ваши проблемы с печатью, иногда скорость массива действительно необходима.
Размышление, безусловно, является выходом (ищите здесь больше), но я считаю, что это слишком вонючий код для моих вкусов. Для более простых случаев вы можете использовать что-то вроде интерфейса ArrayConstructor, который у меня есть ниже. Если бы не тип Node, мы могли бы решить вашу проблему без каких-либо предупреждений за счет увеличения детализации кода и неплотной абстракции (пользователи вашего класса должны будут предоставить конструкторы массива Node и T). К сожалению, поскольку тип узла также принимает параметр типа, мы никак не можем обработать этот случай без предупреждений.
interface ArrayConstructor<T> {
T[] constructArray(int size);
}
class Node <T extends Comparable<? super T>>{
private T[] data;
private Node[] next;
Node(ArrayConstructor<T> dataConstructor,
ArrayConstructor<Node<T>> nodeConstructor){
this.data = dataConstructor.constructArray(3);
this.next = nodeConstructor.constructArray(4);
}
}