Próbuję zaimplementować połączoną kolekcję przy użyciu generycznych elementów, takich jak poniższe.Błąd kompilacji generycznego tworzenia szyny z klasy wewnętrznej
public class A<E> {
private class B {
private B[] b;
private E item;
private B() {
this.b = new B[2];
}
} // end inner class B
} // end class A
A to kolekcja i B element lub węzeł w kolekcji z tablicą zawierającą następniki/poprzedniki i element.
Tworzenie tablicy jest niedozwolone. Otrzymuję błąd: generic array creation
. Czy mam rację, gdy myślę, że to, co tworzy, to tablica A<E>.B
?
Jeśli nie, co powoduje błąd?
Jeśli tak, jak mogę to obejść?
Oczywiście pominięto znaczną ilość kodu, jeśli to, co podałem, nie wystarczy, proszę dać mi znać. Każda rada byłaby doceniona. Dziękuję Ci.
EDIT 1: Powinienem wspomnieć, że sparametryzowany typ musi być taki sam w A
jak w B
. Przekazywanie <E>
do klasy wewnętrznej nie jest możliwe, ponieważ tworzy E#2
i pozostawia A
z E#1
.
Nie specjalnie odpowiedź na swoje pytanie, ale byłoby lepiej konstrukcja mieć dwie zmienne " poprzednik "i" następca "typu B zamiast zestawu dwóch elementów. Czyni twoją klasę łatwiejszą do przeczytania. Sądzę, że to by sprawiło, że twój problem zniknął? –
WRT Edit1, wypróbuj 'statyczną klasę B' i nie będziesz mieć problemu z nazewnictwem. Tablica nadal nie będzie działać, ponieważ jest generyczna. –
Można również obejść ten problem, używając ogólnej kolekcji zamiast tablicy. – trutheality