J'ai vu quelques exemples similaires à ceci à Java et j'espère que quelqu'un peut expliquer ce qui se passe. Il semble que une nouvelle classe puisse être définie en ligne, ce qui semble vraiment bizarre pour moi.
La première ligne d'impression est attendue, car il s'agit simplement de la totrage. Cependant, le 2e semble que la fonction puisse être remplacée en ligne. P>
Y a-t-il un terme technique pour cela?
Ou toute documentation qui passe en plus de profondeur? P>
Si j'ai le code suivant: p>
first: original apple second: modified apple
3 Réponses :
C'est une classe intérieure anonyme. Vous pouvez trouver quelques informations supplémentaires à ce sujet au lien de documentation Java pour Cours intérieurs . edit em> strong> J'ajoute un Better Link décrivant des classes intérieures anonymes, car la documentation Java laisse quelque chose à désirer. / edit em> strong> La plupart des gens utiliseront des classes intérieures anonymes pour définir les auditeurs à la volée. Considérez ce scénario: P> J'ai un bouton code>, et quand je clique dessus, je veux qu'il affiche quelque chose à la console. Mais je ne veux pas avoir à créer une nouvelle classe dans un fichier différent et je ne veux pas avoir à définir une classe interne plus tard dans ce fichier, je veux que la logique soit immédiatement disponible ici. P>
class Example {
Button button = new SomeButton();
public void example() {
button.setOnClickListener(new OnClickListener() {
public void onClick(SomeClickEvent clickEvent) {
System.out.println("A click happened at " + clickEvent.getClickTime());
}
});
}
interface OnClickListener {
void onClick(SomeClickEvent clickEvent);
}
interface Button {
void setOnClickListener(OnClickListener ocl);
}
}
Je veux juste ajouter que la valeur "Cette" valeur "à l'intérieur de la méthode OnClick fait référence à l'instance de bouton, si vous souhaitez vous reporter à l'exemple d'instance à l'intérieur de la méthode OnClick, vous pouvez utiliser" exemple ". Les classes intérieures statiques n'ont pas cette référence cependant.
Qu'est-ce qui se passe dans votre code est que vous êtes implicitement sous-classement Apple code> avec une classe interne anonyme et remplace son
Tostring () code> méthode. P>
C'est ce qu'on appelle une classe intérieure achète, vous pouvez en lire à ce sujet ici < / a> et ici . p>