Lorsque j'utilise des classes internes anonymes pour créer des nœuds. Lorsque j'imprime toutes les clés, elles impriment en tant que 0 au lieu des valeurs que j'ai assignées dans la déclaration de classe anonyme. Est-ce que je fais quelque chose de mal? Voici mon code:Les membres de la classe interne anonyme ne sont pas accessibles, en Java
public class LinkedListTest {
Node head;
public void addInOrder(final int value) {
if (head == null) {
head = new Node() {
int key = value;
};
}
else if(head.key > value) {
final Node temp = head;
head = new Node() {
int key = value;
Node next = temp;
};
}
else {
Node theNode = head;
while(theNode.key < value) {
if (theNode.next == null) {
theNode.next = new Node() {
int key = value;
};
return;
}
else if(theNode.next.key > value) {
final Node temp = theNode.next;
theNode.next = new Node() {
int key = value;
Node next = temp;
};
return;
}
theNode = theNode.next;
}
}
}
Et voici ma déclaration de classe pour mon nœud:
class Node {
int key;
Node next;
}
Et voici ma méthode d'impression:
public void printAll(Node hasNode) {
if (hasNode != null) {
System.out.println(hasNode.key);
if (hasNode.next != null) {
printAll(hasNode.next);
}
}
}
Andy m'a battu de quelques secondes :-), mais oui, c'est ce qui se passe. Dans la sous-classe anonyme, 'int key = value;' déclare et initialise une variable d'instance dans la sous-classe anonyme qui remplace le champ du même nom dans 'Node'. – blm
Je comprends, mais quel est le point d'une classe interne anonyme si les champs de valeurs que je leur attribue ne sont pas accessibles en dehors de la portée de leur déclaré? Je pensais que «l'observation» fonctionnerait dans ce cas. Merci également pour vos commentaires! –
Il existe de nombreuses utilisations pour les classes internes anonymes qui n'impliquent pas la déclaration de variables membres du même nom. Cependant, toute variable membre ou méthode non prioritaire déclarée à l'intérieur de la classe interne anonyme est (presque) inaccessible, puisque vous avez simplement une référence à un 'Node', pas' LinkedListTest $ 1', la sous-classe spécifique de 'Node'. –