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

API standards et tierces Java Discussion :

Tutoriel Guava, partie 4 : les utilitaires


Sujet :

API standards et tierces Java

  1. #1
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut Tutoriel Guava, partie 4 : les utilitaires
    Bonjour à tous,

    Je vous propose une série d'articles consacrés à la bibliothèque Guava, by Google, dont voici le 4ème épisode : les utilitaires.

    http://thierry-leriche-dessirier.dev...a/utilitaires/

    Comme toujours, les remarques sont les bienvenues.

    Bonne lecture

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonjour,

    C'est un article assez complet sur Guava. Il serait peut-être intéressant de montrer ce que ça donne chez la "concurrence" (commons3 et lombok notamment).

    La seule chose qui ne me convainc pas vraiment sont les Optional. Je n'aime pas trop me trimbaler dans toutes les couches de mon application des interfaces qui ne font pas parties du JDK... Si un jour on décide de changer de méthode et de se passer des Optional, il faudra revenir sur toutes les signatures des méthodes de l'application quasiment... J'ai pas de retour sur le long terme mais à première vue ça ne me parait pas une bonne idée.

    Quelques coquilles dans l'article. Tous les morceaux de code apparaissent en double. Il y a un TODO dans les remerciementx. Le lien pour commenter ne pointe pas sur le bon topic.

    Romain.

  3. #3
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Merci pour cette réponse.

    C'est un article assez complet sur Guava. Il serait peut-être intéressant de montrer ce que ça donne chez la "concurrence" (commons3 et lombok notamment).
    Simplifier le code de vos beans Java à l'aide de Commons Lang, Guava et Lombok : http://thierry-leriche-dessirier.dev...-guava-lombok/

    La seule chose qui ne me convainc pas vraiment sont les Optional. Je n'aime pas trop me trimbaler dans toutes les couches de mon application des interfaces qui ne font pas parties du JDK... Si un jour on décide de changer de méthode et de se passer des Optional, il faudra revenir sur toutes les signatures des méthodes de l'application quasiment... J'ai pas de retour sur le long terme mais à première vue ça ne me parait pas une bonne idée.
    L'utilisation des Optional (Option en Scala) est très importante pour la JVM. Personnellement, je trouve qu'elle simplifie beaucoup le code, en particulier dans un contexte multi couche. Je suis néanmoins d'accord avec ta remarque qui précise que ce n'est pas un objet du JDK...

    Quelques coquilles dans l'article. Tous les morceaux de code apparaissent en double. Il y a un TODO dans les remerciementx. Le lien pour commenter ne pointe pas sur le bon topic.
    Je confirme. Je m'en occupe asap.

  4. #4
    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,


    A noter que certaines de ces fonctionnalités ont été intégré dans Java 7, dans la classe java.util.Objects comme avec Objects.equals() et Objects.hash() pour générer les equals()/hashCode(), ou Objects.requireNonNull() pour générer les erreurs en cas de null...


    Enfin Java 8 intégrera une classe Optional


    a++

  5. #5
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Enfin Java 8 intégrera une classe Optional
    Le même nom de classe ;-) ça permettra une transition en douceur.

  6. #6
    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
    Citation Envoyé par thierryler Voir le message
    Le même nom de classe ;-) ça permettra une transition en douceur.
    Par contre je ne sais pas si l'API est la même.
    Pour info : http://download.java.net/jdk8/docs/a.../Optional.html


    a++

  7. #7
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Ça devrait être bon là. Je ne sais pas ce qui a pu se passer dans l'export de l'article.

  8. #8
    Membre actif
    Profil pro
    Chef de projet
    Inscrit en
    Octobre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 56
    Points : 231
    Points
    231
    Par défaut
    Petite astuce, plutôt que de tester la chaine null quand on écrit du code
    str != null && str.equals("abcd")

    c'est plus simple de l'écrire
    "abcd".equals(str)

    Java fait alors le travail tout seul

  9. #9
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    @Derf59: Non non non, ce n'est pas du tout pareil ! Le résultat semble le même mais la mécanique ne l'est pas. Et je ne parle même pas de l’aspect sémantique.

  10. #10
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Pour moi le résultat fait qu'un peu plus que sembler être pareil non ? Ca fait le boulot.

    Après s'inquiéter de l'aspect sémantique dans un cas aussi basique, on est pas loin de la drosophilie non ?

    Enfin je dis ça, on est vendredi aussi on a le droit d'être taquin.

    Bulbo

  11. #11
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Il y a une vraie différence derrière... Toutefois, ce n'est pas l'objet de ce fil, qui concerne Guava. On peut en discuter sur un autre fil si besoin, en donnant l'url à la suite.

  12. #12
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Maintenant que l'idée est lancée: http://www.developpez.net/forums/d13...e/#post7530413


  13. #13
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 76
    Points : 80
    Points
    80
    Par défaut
    Merci pour le tuto.

    je viens d'utiliser la Strings.isNullOrEmpty(xxx) c'est mieux que d'écrire
    {
    xxx == null || (xxx!= null && xxx.equals("") )
    ou
    xxx == null || (xxx!= null && xxx.length == 0 )
    }

    surtout quand on a un grand nombre de chaines à tester (Strings.isNullOrEmpty(xxx) .... Strings.isNullOrEmpty(yyy).

  14. #14
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    C'est fort, tu connais l'API Guava mais pas l'API standard ni les règles associées aux opérateurs logique du langage.

    Ca, ça suffit par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((x == null) || x.isEmpty())
    Et le pire c'est que parfois on se retrouve avec un import d'une librairie complète genre guava (attention je ne remets pas en cause la qualité de ladite librairie hein) pour 2 utilisations en tout et pour tout d'un Strings.isNullOrEmpty(xxx).

    Bon, dans mon vécu c'était commons.lang.StringUtils.isEmpty() .. 2 appels dans une seule classe de tout le projet .. et utilisé dans une applet donc downloadée à chaque fois.. bravo

    Bulbo

  15. #15
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 76
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par bulbo Voir le message
    C'est fort, tu connais l'API Guava mais pas l'API standard ni les règles associées aux opérateurs logique du langage.

    Ca, ça suffit par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((x == null) || x.isEmpty())
    Et le pire c'est que parfois on se retrouve avec un import d'une librairie complète genre guava (attention je ne remets pas en cause la qualité de ladite librairie hein) pour 2 utilisations en tout et pour tout d'un Strings.isNullOrEmpty(xxx).

    Bon, dans mon vécu c'était commons.lang.StringUtils.isEmpty() .. 2 appels dans une seule classe de tout le projet .. et utilisé dans une applet donc downloadée à chaque fois.. bravo

    Bulbo
    Tu as raison, mais comme on est encore avec Java5 car on compile pour un weblo10, le isEmpty() du String n'existe pas,

    si c'est uniquement pour un test null ou vide, il vaut mieux faire simple

    et pour ne pas réécrire plusieurs fois le test, une toute petite méthode qui fait le boulot (x == null) || x.isEmpty()) suffit largement.

    Merci

  16. #16
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Pour faire un isNullOrEmpty maison, c'est pas bien dur :

    En Java 4 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static boolean noe(final string s) {
      return s == null || s.lenght == 0;
    }
    En Java 6 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static boolean noe(final string s) {
      return s == null || s.isEmpty();
    }
    Effectivement, pas besoin de Guava pour faire ça. Vous n'utiliserez la classe Strings que si vous avez déjà chargé Guava. Sinon vous ferez une méthode maison.

Discussions similaires

  1. Tutoriel Guava, partie 2 : les collections
    Par thierryler dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 02/11/2013, 13h46

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