2013-04-11 1 views

Répondre

2

Les classes anonymes sont fréquemment utilisées dans les applications GUI. Lorsque vous avez seulement besoin de déclarer et créer un objet d'une classe en même temps, cela peut rendre le code plus précis.

Voici un exemple:

 btn.setOnAction(new EventHandler<ActionEvent>() { 

      @Override 
      public void handle(ActionEvent event) { 
       System.out.println("Hello World!"); 
      } 
     }); 
1

Les classes anonymes ne sont pas définies à chaque fois qu'elles sont instanciées. Ils sont compilés en bytecode, tout comme les autres classes, avec un nom par exemple. MyEnclosingClass$1. Voir ce post pour plus d'informations: How are anonymous classes compiled in Java?

Tangentiellement, la réflexion peut être utilisée pour les identifier à l'exécution en utilisant Class.isAnonymousClass().

+1

Hmm, j'ai peut-être mal compris la question. –

0

Cela dépend de la situation; dans certains cas, il vaudra mieux utiliser une classe anonyme, et dans d'autres, il vaudra mieux utiliser une classe concrète qui implémente l'interface requise.

Si vous pensez que vous devrez fournir la même définition de classe anonyme à plusieurs reprises, cela vous fera probablement gagner du temps pour transmettre une instance d'une classe concrète qui implémente l'interface requise.

Le langage Java fournit une syntaxe de classe anonyme pour plus de commodité.

0

Pour vous donner un avant-goût, voici un rapide example de ma propre expérience: Avoir des listes soutenues par des fonctions.

En général, les classes anonymes ont (entre autres) les utilisations suivantes:

  • Supposons que vous voulez avoir un objet (une instance, pas une classe) dont le comportement dépend d'une valeur disponible lors de l'exécution. Sans les classes anonymes, vous pouvez le faire en définissant des champs (ou en appelant des méthodes de changement d'état) - mais vous ne pouvez pas avoir un code différent en cours d'exécution. Maintenant, vrai, vous pourriez avoir un tas de switch() instructions dans le code de la méthode de votre classe - mais cela déconnecte complètement la définition du comportement de son contexte. Une autre façon de procéder est d'utiliser une sous-classe nommée, mais c'est beaucoup de code, et cela crée un nom que vous ne voulez pas vraiment exister.
  • Functional Programming! Jusqu'à Java 8 arrive, les fonctions anonymes sont à peu près le seul moyen de transmettre des fonctions, qui ne sont pas first-class citizens en Java. Avec ceux-ci, vous pouvez effectuer de nombreux tours soignés et élégants comme mon exemple ci-dessus.
Questions connexes