2010-11-18 23 views
2

http://www.java2s.com/Code/Java/Event/PropertyChangeListenerSample.htmÉcrire une classe tout en l'instanciant?

(Java)

Dans l'exemple ci-dessus, je remarquai la ligne

PropertyChangeListener propertyChangeListener = new PropertyChangeListener() { 

par lui-même, ce ne serait pas logique, comme PropertyChangeListener (java.beans.PropertyChangeListener) est une interface, et n'est donc pas instanciable.

Cependant, juste après, il semble qu'une classe implémentant PropertyChangeListener soit en cours d'écriture, sans jamais créer d'instruction de mot clé de classe. Je n'ai jamais rencontré cette syntaxe auparavant.

Comment s'appelle cette syntaxe et comment l'utiliser correctement? Aussi, quelqu'un peut-il m'en donner plus d'exemples? Je ne sais pas exactement quoi google, donc toutes les pistes seraient utiles.

Répondre

1

Anonymous inner class (article de Wikipédia)

classes internes anonymes sont également utilisées où le code de gestion des événements est uniquement utilisé par un composant et donc n'a pas besoin d'une référence nommée.

Cela évite un grand monolithe actionPerformed (ActionEvent) méthode avec plusieurs if-else branches à identifier la source de l'événement. Ce type de code est souvent considéré comme désordonné et les variations de classe interne sont considéré comme étant mieux dans tous les domaines .

Il est surtout utilisé (dans AWT) lorsque les développeurs veulent écrire leur propre ActionEvent et ActionListener et EventListener. Vous pouvez également le trouver dans la méthode java.util.Vector elements() qui a une classe interne anonyme de Enumerable.

2

Ceci est une instance d'un anonymous inner class.

Une classe interne anonyme est une classe qui n'a pas son propre nom de classe unique (comme vous l'avez remarqué, elle est simplement nommée par l'interface implémentée). La classe interne anonyme a également accès à toutes les variables finales de la méthode dans laquelle elle est déclarée.

0

Ceci est appelé Anonymous inner Class ... Voir this question pour plus de détails dans les classes internes