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 :

Méthodes exportées : commentaires


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut Méthodes exportées : commentaires
    C'est dommage, sur les tutoriels, on ne peut pas "réagir" directement, c'est pourquoi je fais un post ici.

    Suite à cet article: Constructeurs et méthodes exportées

    Je voudrais juste rajouter que l'utilisation des méthodes exportées peut être dangereuse même si l'on n'est pas dans le constructeur... Et c'est quand même tentant si on a une méthode a(int i), et une méthode b() qui fait la même chose que a(5) d'appeler a(5) dans b().

    Et aussi que dans Swing (par exemple dans JTabbedPane), ils utilisent des "méthodes exportées" (je ne connaissais même pas le nom), car quand on redéfinit addTab(...) en mettant comme code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    throw new UnsupportedOperationException();
    (pour éviter qu'on puisse ajouter un onglet de l'extérieur), et bien ça plante dès le constructeur...

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par ®om
    Je voudrais juste rajouter que l'utilisation des méthodes exportées peut être dangereuse même si l'on n'est pas dans le constructeur... Et c'est quand même tentant si on a une méthode a(int i), et une méthode b() qui fait la même chose que a(5) d'appeler a(5) dans b().
    Pour moi ce n'est pas vraiment dangereux en dehors des constructeurs... Au contraire c'est même plutôt utile...


    Citation Envoyé par ®om
    Et aussi que dans Swing (par exemple dans JTabbedPane), ils utilisent des "méthodes exportées" (je ne connaissais même pas le nom), car quand on redéfinit addTab(...) en mettant comme code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    throw new UnsupportedOperationException();
    (pour éviter qu'on puisse ajouter un onglet de l'extérieur), et bien ça plante dès le constructeur...
    Personne n'a jamais dit que l'API standard respectait toujours les bonnes règles de developpement

    a++

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par adiGuba
    Personne n'a jamais dit que l'API standard respectait toujours les bonnes règles de developpement
    C'est clair, il suffit meme de regarder le code source de Swing pour s'en rendre compte (mais bon, le code de Swing est bien mieux que celui de l'AWT soit dit en passant).
    C'est du genre "faites ce que nos didacticiels disent mais ne faites surtout pas ce qu'on fait nous". Mais bon, ce ne sont pas des pratiques qui sortent de l'ordinaire non plus .
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre expérimenté
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Par défaut
    Citation Envoyé par ®om
    Et aussi que dans Swing (par exemple dans JTabbedPane), ils utilisent des "méthodes exportées" (je ne connaissais même pas le nom), car quand on redéfinit addTab(...) en mettant comme code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    throw new UnsupportedOperationException();
    (pour éviter qu'on puisse ajouter un onglet de l'extérieur), et bien ça plante dès le constructeur...
    Oui d'accord mais ce n'est pas parceque tu redéfinis une méthode que tu dois changer le contrat de la méthode. Il n'a jamais été dit dans l'API de JTabbedPane que tu pouvais lever une exception de ce type en appelant la méthode addTab. A mon avis, pour limiter l'ajout d'onglets, il faudrait juste que tu ta méthode rédéfinie se contente de ne rien faire.

  5. #5
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par McFoggy
    Oui d'accord mais ce n'est pas parceque tu redéfinis une méthode que tu dois changer le contrat de la méthode. Il n'a jamais été dit dans l'API de JTabbedPane que tu pouvais lever une exception de ce type en appelant la méthode addTab. A mon avis, pour limiter l'ajout d'onglets, il faudrait juste que tu ta méthode rédéfinie se contente de ne rien faire.
    Je ne change pas le "contrat" de la méthode, UnsupportedOperationException étend RuntimeException... Si l'exception est levée au runtime, c'est que la méthode est exécutée (d'ailleurs il doit s'agir d'un add et non d'un addTab).

  6. #6
    Membre expérimenté
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Par défaut
    Pour moi changer le comportement d'une méthode en renvoyant même une RuntimeException est un changement de contrat.

    Si j'ai une méthode qui est susceptible de lever une exception Runtime elle est décrite dans la javadoc. Sinon c'est qu'elle n'en lève pas. Dans l'exemple suivant j'ai deux méthodes une qui est suceptible de lever une NPE et l'autre pas.
    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
        /**
         * @param s une chaine
         * @return la chaine en majuscule
         * @throws NullPointerException si la chaine est nulle
         */
        public String toUpperCase(String s) {
            return s.toUpperCase();
        }
     
        /**
         * @param s une chaine
         * @return la chaine en majuscule
         */
        public String toUpperCaseSafe(String s) {
            if (s!=null) {
                return s.toUpperCase();
            }
            return null;
        }
    Pour moi si jamais tu surcharges toUpperCaseSafe tu n'as pas le "droit" de lancer une NPE, c'est le contrat de ma méthode !

    Voilà c'est simplement mon interprétation du @throws qui n'est que trop peu souvent utilisé.

  7. #7
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    J'ai simplement suivi le comportement des unmodifiableCollection:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collection.unmodifiableList(maList);
    Ca renvoie une liste, et si tu fais un add dessus, ça renvoie un UnsupportedOperationException...

  8. #8
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ®om
    J'ai simplement suivi le comportement des unmodifiableCollection:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collection.unmodifiableList(maList);
    Ca renvoie une liste, et si tu fais un add dessus, ça renvoie un UnsupportedOperationException...
    Justement !

    Si tu regarde la doc de la méthode List.add(), tu peux lire ceci :
    Throws:
    UnsupportedOperationException - if the add method is not supported by this list.
    ClassCastException - if the class of the specified element prevents it from being added to this list.
    NullPointerException - if the specified element is null and this list does not support null elements.
    IllegalArgumentException - if some aspect of this element prevents it from being added to this list.
    Ce qui veut dire que la méthode peut renvoyer des UnsupportedOPerationException (entre autres). Donc le contrat est respécté...


    Ce n'est pas le cas des méthodes addTab() de JTabbedPane...

    a++

Discussions similaires

  1. [XL-2007] Export commentaires excel vers power point
    Par arnest dans le forum Excel
    Réponses: 1
    Dernier message: 04/08/2012, 19h08
  2. Réponses: 2
    Dernier message: 15/12/2007, 20h24
  3. Export des commentaires des champs de table en mode création
    Par zigzagzoug dans le forum Modélisation
    Réponses: 5
    Dernier message: 11/10/2007, 17h50
  4. Commentaires "javadoc" méthodes et classes
    Par JohnNC dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 07/02/2007, 11h43
  5. [VS.net2003][IDE] Exporter la liste des méthodes
    Par arnolem dans le forum Visual Studio
    Réponses: 2
    Dernier message: 01/06/2006, 16h53

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