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 :

Question sur la syntaxe


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Feres_agent1116
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Février 2013
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Back-End
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 121
    Par défaut Question sur la syntaxe
    Bonjour,

    Lors de mon parcours d'un code source d'un projet , je me suis retrouver sur un bout de code que j'ai pas compris sa signification. c'est la première fois ou je trouve ces trucs
    voici l'exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // Get the List
        ListIdentities keys = identities.get(
            new ServiceContext<ListIdentities>() {
              public ListIdentities execute() {
                List<Identity> got = storage.getIdentitiesMentions(
                    providerId, profileFilter, offset, limit, loadOrReloadProfile);
                return build(got);
              }
            },
            listKey);
     
        //
    Je ne comprend pas pourquoi on a utilisé une sorte de new instance avec une methode à executer à l’intérieur (paramètre de la methode) .
    Qu'appelle t on un tel truc !!
    Merci pour votre coopération .

  2. #2
    Membre éclairé Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Par défaut
    Salut,

    Dans ton exemple de code, je ne vois pas les "..." mais en Java les "..." permettent de ne pas fixer le nombre d'argument qu'une méthode peut recevoir, elle va donc tout stocker dans un tableau
    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
    public int addition(int...nombres)
    {
        int resultat = 0;
        for(int nombre : nombres)
        {
            resultat += nombre;
        }
        return resultat;
    }
     
    public main()
    {
        addition(3); // resultat = 3
        addition(1,2); //resultat = 3
        addition(1,1,-5,4,2); //resultat = 3
    }

  3. #3
    Membre confirmé Avatar de Feres_agent1116
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Février 2013
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Back-End
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 121
    Par défaut
    Citation Envoyé par nchal Voir le message
    Salut,
    Dans ton exemple de code, je ne vois pas les "..." mais en Java les "..." permettent de ne pas fixer le nombre d'argument qu'une méthode peut recevoir, elle va donc tout stocker dans un tableau
    Merci nchal, Désolé pour cette confusion mais je parle d block a l intérieur de la methode j'ai fait la MAJ de mon msg. thx

  4. #4
    Membre éclairé Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Par défaut
    Re,

    Je ne suis pas expert en la matière et je ne suis pas sûr du nom de ce truc (je dirais bloc static, nested type ou inner type, un truc dans le genre mais je confond peut etre).
    Mais on comprend facilement ce que ça fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        ListIdentities keys = identities.get(
            new ServiceContext<ListIdentities>() { // declaration d'un new service contexte et derrière un bloc static pour l'initialiser
              public ListIdentities execute() { // declaration de la méthode dans le bloc static
                List<Identity> got = storage.getIdentitiesMentions(providerId, profileFilter, offset, limit, loadOrReloadProfile); // on initialise une nouvelle list qui va contenir le resultat de la fonction storage.machin
                return build(got); // le methode retourne le resultat de la methode build appliquer à la liste qu'on vient d'instancier
              } 
            },// le nouveau service contexte est instancier avec le resultat de la méthode execute qui est lui même le retour de la methode build
            listKey); // deuxième argument de la méthode get, qui à l'air plus simple à mettre en place ;)
    // du coup, dans keys tu as le resultat de la méthode get avec 2 paramètres : un servicecontext instancier par la méthode execute definit dans un bloc static et une "listKey"
    Comme je ne suis pas sûr de ce que je dit, je lance un appel aux génies de ce forum pour venir corriger ce que je viens de dire

  5. #5
    Membre émérite Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Par défaut
    Citation Envoyé par Feres_agent1116 Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // Get the List
        ListIdentities keys = identities.get(
            new ServiceContext<ListIdentities>() {
              public ListIdentities execute() {
                List<Identity> got = storage.getIdentitiesMentions(
                    providerId, profileFilter, offset, limit, loadOrReloadProfile);
                return build(got);
              }
            },
            listKey);
     
        //
    Je ne comprend pas pourquoi on a utilisé une sorte de new instance avec une methode à executer à l’intérieur (paramètre de la methode) .
    Qu'appelle t on un tel truc !!
    Il s'agit d'une classe anonyme. Ca permet de définir une implémentation d'une interface à la volée et de ne pas créer une classe spécialement pour cela. Généralement, c'est utilisé quand il y a peu de méthodes à implémenter et quand ce n'est pas réutilisé ailleurs.

    A noter que les classes anonymes sont généralement utiliser pour implémenter une sorte de fonction, par exemple lors que tu veux trier une collection, tu peux fournir un Comparator qui indiquera la manière de comparer les éléments de la liste.

    Voici un exemple provenant de la documentation :

    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
    import java.util.*;
    public class EmpSort {
        static final Comparator<Employee> SENIORITY_ORDER = new Comparator<Employee>() {
                public int compare(Employee e1, Employee e2) {
                    return e2.hireDate().compareTo(e1.hireDate());
                }
        };
     
        // Employee database
        static final Collection<Employee> employees = ... ;
     
        public static void main(String[] args) {
            List<Employee> e = new ArrayList<Employee>(employees);
            Collections.sort(e, SENIORITY_ORDER);
            System.out.println(e);
        }
    }

    SENIORITY_ORDER utilise la déclaration d'une classe anonyme pour indiquer la manière donc deux éléments doivent être comparés.

    C'est notation est assez verbeuse et est appelée, pour ce type d'utilisation, à disparaître avec l'arrivée des lambda daans java 8. Tu pourras directement ecrire une lambda
    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
    public class EmpSort {
        static final Comparator<Employee> SENIORITY_ORDER =
                (Employee e1, Employee e2) -> {
                    return e2.hireDate().compareTo(e1.hireDate());
                };
     
     
        // Employee database
        static final Collection<Employee> employees = ...;
     
        public static void main(String[] args) {
            List<Employee> e = new ArrayList<Employee>(employees);
            Collections.sort(e, SENIORITY_ORDER);
            System.out.println(e);
        }
    }
    pour plus de détails, tu as la documentation officelle

  6. #6
    Membre confirmé Avatar de Feres_agent1116
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Février 2013
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Back-End
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 121
    Par défaut
    slt,

    Merci pour toutes ces explications qui sont bien détaillées (y)

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

Discussions similaires

  1. Question sur la syntaxe *(double *) x;
    Par deubelte dans le forum C++
    Réponses: 4
    Dernier message: 13/06/2008, 09h18
  2. Questions sur la syntaxe des sélecteurs
    Par pierre24 dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 22/04/2008, 12h17
  3. [PHP-JS] Question sur la syntaxe entre PHP et HTML
    Par Diabless6 dans le forum Langage
    Réponses: 8
    Dernier message: 13/04/2007, 13h08
  4. [C#] quelques questions sur la syntaxe de base en C#
    Par DonJR dans le forum Windows Forms
    Réponses: 14
    Dernier message: 06/12/2006, 14h01
  5. [Tableaux] QUestion sur la syntaxe
    Par clementphp dans le forum Langage
    Réponses: 8
    Dernier message: 21/09/2006, 02h37

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