Есть ли способ сделать следующий код работы Java?Общий массив инициализации внутреннего класса в java
public class RandomizedQueue<Item> implements Iterable<Item> {
private static final int ARRAYSIZE = 8; // default array size
private Node[] nodeArray; // contains pointers to the randomized nodes
private int size; // current size of queue
private class Node
{
private Item item;
private Node next;
private Node previos;
}
@SuppressWarnings("unchecked")
public RandomizedQueue() // construct an empty randomized queue
{
nodeArrays = (Node[]) new Object[ARRAYSIZE]; // fix this and everything works!
}
// unimportant randomized queue implementation details
// ...
}
Это происходит сбой во время выполнения при инициализации линии nodeArray со следующей ошибкой:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LRandomizedQueue$Node; at RandomizedQueue.<init>(RandomizedQueue.java:18) at Subset.main(Subset.java:6)
.
Проблема в том, что я не могу использовать структуры данных библиотек, такие как ArrayList <>, потому что у меня были пользовательские правила переразмера. Кроме того, я не могу реализовать аналог ArrayList сам (в моей задаче не разрешены дополнительные классы).
Код nodeArray = new Node[ARRAYSIZE];
не скомпилирован в Eclipse с ошибкой Cannot create a generic array of RandomizedQueue<Item>.Node
.
Почему не 'Node [] nodeArrays = новый узел [ARRAYSIZE ]; –
Вы храните его как 'Node []', зачем его инициализировать как 'Object []'? –
Если бы вы могли указать пользовательские правила изменения размера ArrayList, не могли бы вы его использовать? – Bohemian