2017-07-25 2 views
0

Je suis en train de réécrire ce codeComment écrire l'expression lambda avec EventHandler JavaFX

new EventHandler<MouseEvent>() { 

    @Override 
    public void handle(MouseEvent event) { 
     System.out.println(e.hashCode()); 
    } 
}; 

comme

new EventHandler<MouseEvent>(e -> System.out.println(e.hashCode())); 

et je reçois des erreurs. Quelle est mon erreur ici?

+2

L'équivalent lambda du premier bloc de code est simplement 'event -> System.out.println (event.hashCode())' (sans l'appel à un constructeur, qui est Je pense que vous essayez de faire). –

+0

en termes simples, c'est l'ensemble de l'interface fonctionnelle que vous remplacez avec lambda et non la fonction au sein de l'interface. L'équivalent lambda de votre premier extrait de code est 'event -> System.out.println (e.hashCode())'. Ce que vous faites est en train d'ajouter "lambda" dans le constructeur. Invalide – Dota2

Répondre

0

ALL vous écrivez du code au début devient: event -> {System.out.println(event.hashCode());

donc en cours d'utilisation (par exemple):

someNode.addEventHandler(MouseEvent.MOUSE_CLICKED, 
          new EventHandler<MouseEvent>() { 
           @Override 
           public void handle(MouseEvent event) { 
            // TODO Auto-generated method stub 
            System.out.println(event.hashCode()); 
           } 
          }); 

peut être :

someNode.addEventHandler(MouseEvent.MOUSE_CLICKED, 
          event -> { System.out.println(event.hashCode()); } 
         ); 

Parce que vous la proposition est un essai pour instancier EventHandler qui est une interface de sorte que vous ne pouvez pas, vous pouvez faire une implémentation anonyme (1ère voie avec) ou tout éviter et utiliser lambda-exp