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

avec Java Discussion :

Question de base sur les interfaces de java.util.function


Sujet :

avec Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut Question de base sur les interfaces de java.util.function
    Bonjour,
    je suis en train d'apprendre les nouveautés en Java 8. Il y a une notion qui m'échappe, ce sont les interfaces de java.util.function, dont les plus connues sont :
    - Consumer<T>
    - Function<T,R>
    - Predicate<T>
    - Supplier<T>

    J'ai trouvé un exemple d'utilisation pour chacun

    - Consumer<T>
    -------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    import java.util.function.Consumer;
    *
    public class ConsumerTest {
    *
    *
    *
        public static void main(String[] args) {
    *
    *
    Consumer consumer = ConsumerTest::printNames;
    *
    *
    consumer.accept("Jeremy");
    consumer.accept("Paul");
    consumer.accept("Richard");
    *
        } 
    *
        private static void printNames(String name) {
            System.out.println(name);
        }
    }
    Quand on écrit Consumer consumer = ConsumerTest::printNames; la variable consumer semble être initialisée par une méthode et non par une interface. Ma question est : qu'est ce que la variable consumer ? une interface ou une méthode ?

    - Supplier<T>
    ------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    package org.arpit.java2blog;
    import java.util.function.Supplier;
    *
    public class Java8SupplierExample {
    *
    public static void main(String[] args) {
    **
    **Supplier supplier=()->"Arpit";
    **System.out.println(supplier.get());
    }
    Même question, supplier est une interface ou une méthode ?


    - Function<T,R>
    ------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Function<Employee, String> funcEmpToString= (Employee e)-> {return e.getName();};
    Même question, funcEmpToStringest une interface ou une méthode ?

    etc...

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    les deux dernières sont ce qu'on appelle des expressions lambda. Au final au runtime, la variable contient un genre de simili d'instance d'un simili de classe, qui implémente l'interface Consumer/Supplier/Function.

    Fondamentalement ça réagit en tout point comme un objet normal, c'est juste que quand tu demandes quelle est la classe de cet objet, tu obtiens des résultats un peu nouveaux avec Java 8. Notamment sur cette classe, isSynthetic renvoie true. Bon courage avant Java 8 pour écrire un programme Java qui produise ça.

    La première n'est pas une lambda mais une référence de méthode. Peu importe, au runtime ça fait pareil.

    Essaie donc ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(consumer.getClass());
    et ne cherche pas trop longtemps à y trouver un sens. Java a inventé une convention qui lui permet de représenter des objets produits par expression lambda.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    Merci pour ta réponse Thelvin

Discussions similaires

  1. question de base sur les transactions
    Par nouraty dans le forum Débuter
    Réponses: 3
    Dernier message: 22/12/2010, 21h51
  2. question de base sur les pointeurs
    Par Ganondorf dans le forum Débuter
    Réponses: 4
    Dernier message: 26/08/2010, 17h07
  3. question de base sur les classes
    Par tanguy.L dans le forum Langage
    Réponses: 10
    Dernier message: 28/02/2008, 17h37
  4. Réponses: 13
    Dernier message: 10/10/2007, 10h09
  5. Question de base sur les classes
    Par deaven dans le forum C++
    Réponses: 3
    Dernier message: 27/11/2005, 16h20

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