Wie verwende ich paramertized generische Typen in einer inneren Klasse?
Ich versuche zu implementieren ist eine innere Klasse, die einen generischen, parametrisierten Typ.
Hier ist eine kurze version von meinem code:
public class AVLTree<T extends Comparable<? super T>> implements Iterable<T> {
...
private class BinaryNode<T extends Comparable<? super T>> {
...
}
private class TreePreOrderIterator<E extends Comparable<? super E>> implements Iterator<E> {
...
}
}
Funktioniert es nicht. Eclipse/Java ist mir eine Warnung, dass der Typ T
parameter auf die innere Klasse ist "verstecken" die super-Klasse s-parameter. Irgendwelche Gedanken auf, wie kann ich dieses Problem beheben?
EDIT: ich fügte hinzu, die anderen inner Klasse ich habe Probleme mit: TreePreOrderIterator
. Der generische Typ T
werden für AVLTree
BinaryNode
und TreePreOrderIterator
. Die inneren Klassen zugreifen zu können, müssen die Felder in AVLTree.
EDIT2: Auch das Iterator
greift auf eine BinaryNode<T>
das ist ein Konflikt.
(Hinweis: Dies ist Teil der größeren Projekt, das ich mache für eine Klasse. Wenn irgendwelche anderen Informationen benötigt, bitte Fragen.)
InformationsquelleAutor der Frage Will M | 2010-01-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wollen
T
imBinaryNode
werden, die vom gleichen Typ wie die übergeordneteT
im Zusammenhang mitAVLTree
entfernen Sie die Erklärung derT
imBinaryNode
.Wenn Sie möchten, dass die
T
imBinaryNode
anders zu sein, als die einschließendenT
im Zusammenhang mit
AVLTree
, aber Siemöchten in der Lage sein, um auf Eigenschaften zuzugreifen
der Elternteil
AVLTree
benennen SieT
zuetwas anderes ist.
Wenn Sie nicht brauchen, um Zugang
Eigenschaften des umschließenden
AVLTree
,machen
BinaryNode
statisch.InformationsquelleAutor der Antwort ILMTitan
Nur umbenennen
T
etwas anderes, so würde es nicht zu Konflikten mit der äußeren Klasse T.Den type-parameter-Namen sind sichtbar in allen der Gültigkeitsbereich der Klasse, einschließlich der inneren Klassen. Also innere Klassen-oder Instanz-Methoden sollte erklären, noch eine andere Art der parameter, deren Namen in Konflikt mit der Klasse der Typ-parameter. Jedoch statisch geschachtelte Klassen und statische Methoden haben dieses problem nicht.
InformationsquelleAutor der Antwort notnoop
Einfach entfernen generic Typ-Deklaration aus der Klasse BinaryNode. Da die Klasse private deklariert ist, kann es nur existieren innerhalb AVLTree, und dafür können Sie nur verwenden Sie das T erklärt für AVLTree irgendwo im BinaryNode.
InformationsquelleAutor der Antwort Vort3x
Ist es, weil die parameter
T
(als parameter für dieBinaryNode<T>
Klasse) ist die gleiche wie fürAVLTree<T>
-- die parameter fürAVLTree
ist normalerweise in dem Bereich für die definition der inneren KlasseBinaryNode
ist, sondern weil Sie geben Sie einen neuen parameter mit dem gleichen Namen, wird es verborgen. Sie könnten stattdessen:InformationsquelleAutor der Antwort Edmund