IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Premiers pas avec Java 8 et les expressions lambas.


Sujet :

Langage Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Points : 153
    Points
    153
    Par défaut Premiers pas avec Java 8 et les expressions lambas.
    Bonjour,

    Je fais quelques tests avec java 8 et mon premier essai fonctionnel me laisse perplexe. Dans de nombreux tutoriels, le premier exemple est:
    Si je copie ce code dans une méthode main, j'ai une erreur de compilation:
    Syntax error, insert "AssignmentOperator Expression" to complete Expression
    Je change donc mon exemple en conséquence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String example = () -> "Hello world!";
    La compilation échoue toujours:
    The target type of this expression must be a functional interface
    OK. Le type String n'est ni une interface ni fonctionnel. Grace à google, je conclue que j'ai besoin d'une interface type Runnable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runnable example = () -> "Hello world!";
    J'ai une nouvelle erreur de compilation
    Void methods cannot return a value

    Pour résumer, je n'ai toujours pas réussi à compiler un exemple simple de lambda.

    Merci de votre aide

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    ça ne serait pas plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runnable example = () ->{ System.out.println("Hello world!"); };
    parce que "Hello world!" tout seul, ce n'est pas une instruction ;
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    C'est tout à fait normal, il faut que l'expression lambda corresponde à interface fonctionnelle à laquelle tu l'affectes.

    • Dans ton premier exemple tu ne fais que déclarer la lambda sans l'affecter nulle part. Cela ne sert à rien.
      C'est comme si tu faisais seulement ceci : 15;
    • Dans le second cas tu affectes ta lambda à une String. Encore une fois c'est faux puisqu'une lambda n'est pas un String (même si en l’occurrence le résultat de ta lambda est une String)
    • Enfin tu affectes ta lambda à une interface fonctionnelle, mais les signatures de méthode ne correspondent pas. Cela ne peut donc pas marcher.




    On pourrait décrire ta lambda comme ceci : "méthode sans paramètre retournant un String".
    Or Runnable est une interface fonctionnelle dont la méthode n'a pas de paramètre (OK) mais pas de type de retour ! C'est donc incompatible.


    Il te faut donc utiliser une interface fonctionnelle avec une "méthode sans paramètre retournant un String".
    Soit en créant toi-même cette interface, soit en utilisant une interface préexistante.

    En occurrence j’opterais pour Supplier<String> et sa méthode get() !
    (même si Callable<String> pourrait également faire l'affaire)

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Supplier<String> example = () -> "Hello world!";
     
    String hello = example.get();

    a++

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Points : 153
    Points
    153
    Par défaut
    Merci pour vos précisions.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Premier pas avec les Styles Firemonkey avec XE4
    Par SergioMaster dans le forum Codes sources à télécharger
    Réponses: 8
    Dernier message: 11/06/2014, 19h36
  2. Réponses: 4
    Dernier message: 06/10/2010, 20h47
  3. Premier pas avec les class
    Par Jiyuu dans le forum Tkinter
    Réponses: 7
    Dernier message: 17/02/2008, 11h49
  4. premier pas avec java
    Par single dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 05/08/2007, 09h41
  5. [debutant] premier pas avec le SDK directX9
    Par arno2004 dans le forum DirectX
    Réponses: 6
    Dernier message: 27/05/2004, 21h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo