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

Java Discussion :

Méthodes optionnelles dans les interfaces


Sujet :

Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Points : 72
    Points
    72
    Par défaut Méthodes optionnelles dans les interfaces
    Bonjour,

    J'aimerai savoir est ce qu'il y a une possiblité de déclarer dans une Inteface des méthodes optionnel, c'est a dire qu'ils ne sont pas obligatoire implémenter dans les classes ?

    Merci

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par mimish Voir le message
    J'aimerai savoir est ce qu'il y a une possiblité de déclarer dans une Inteface des méthodes optionnel, c'est a dire qu'ils ne sont pas obligatoire implémenter dans les classes ?
    Non, pas à ma connaissance, après rien ne t'obliges à implémenter le code des méthodes qui ne te servent pas.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Tu peux faire une classe abstraite, qui implémente toutes les méthodes sans rien faire.
    Tu étends ensuite ta classe abstraite en redéfinissant seulement la méthode qui t'intéresse.

    Cas concret :

    MouseListener (Entre autres) <---- MouseAdapter


    An abstract adapter class for receiving mouse events. The methods in this class are empty. This class exists as convenience for creating listener objects.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Points : 72
    Points
    72
    Par défaut
    Donc ça n'existe pas

    Merci à vous

  5. #5
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par mimish Voir le message
    Donc ça n'existe pas
    Et pourquoi as tu besoin de ça ? Car à partir du moment ou tu utilises une interface, c'est que tu souhaites certifier aux classes utilisatrices, qu'elles peuvent utiliser les services proposer par l'interface et donc les méthodes disponibles.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Si tu veux rendre optionnel dans le Sens "certaines implémentation auront des fonctionnalités avancée", il y a deux manière de faire

    Soit:

    créer une interface avec tout, et des methodes du style canXxxxx() ou isXxxxxSupported(). Avec comme convention que l'utilisateur de l'interface devra appeler d'abord ces méthodes pour savoir si les méthodes avancées sont disponible.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Machin implements Truc {
        @override
        public boolan supportBidule() {return false; }
        @override
        public void bidule() {throw new UnsupportedOperationException("Bidule pas supporté"); }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class MachinBidule implements Truc {
        @override
        public boolan supportBidule() {return true; }
        @override
        public void bidule() {System.out.println("bidule");}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Truc t = .....;
    if (t.supportBidule())
       t.bidule();
    Soit:
    tu travaille avec deux interface: (exemple typique: Graphics et Graphics2 de java)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface Bidule extends Truc{
       public void bidule();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class Machin implements Truc {
        // methodes de Truc
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class MachinBidule implements Bidule {
        @override
        public void bidule() {System.out.println("bidule");}
        // methodes de Truc
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Truc t = .....;
    if (t instanceof Bidule)
       ((Bidule)t).bidule();

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


    Juste pour information : avec Java 8 il sera possible de définir des méthodes optionnelles via les "default methods" (parfois nommé "virtual extension methods" ou "defender methods".


    Ces méthodes permettent d'ajouter de nouvelles méthodes dans une interface, sans que les classes filles ne soient obligé de les implémenter.

    Exemple (la syntaxe n'est peut-être pas définitive) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    interface Exemple {
     
    	public void methodeStandard();
     
    	public void methodeOptionnel() default {
    		throw new UnsupportedOperationException("methodOptionnel");
    	}
     
    }

    a++

  8. #8
    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
    Ça reste pas très intéressant -_-°. L'intérêt d'avoir des méthodes si elles sont pas obligées de marcher, hein...

    C'est une construction pas très originale, souvent vue, et qui, de fait, ne simplifie la vie qu'à son auteur et pose des problèmes aux autres.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Ca ressemble beaucoup à de l'heritage multiple ca. Et ca posera les meme problematiques...

    Pour en revenir à la question de départ, une interface peut se voir comme un contrat qui permet justement d'imposer que toute classe qui l'implemente ait les fonctions definies dans l'interface. Rendre des fonctions optionnelles serait contraire au principe meme de l'interface.

    Il faudrait plutot exposer quel est le probleme exactement mais la solution n'est pas de rendre des fonctions optionnelles.
    Mais bon, des solutions ont deja été données sur comment faire. J'ajouterais (dans la categorie bidouille immonde) la possibilité d'utiliser la reflexion pour savoir si la classe possede telle ou telle methode.

  10. #10
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    Avoir plusieurs interface ou une classe abstraite avec des implémentations vide restent pour moi les meilleures solutions, mais n'est-ce pas plutot à la base un problème de conception?

  11. #11
    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
    Citation Envoyé par deathness Voir le message
    Avoir plusieurs interface ou une classe abstraite avec des implémentations vide restent pour moi les meilleures solutions, mais n'est-ce pas plutot à la base un problème de conception?
    Si... Comme je l'ai déjà dit, avoir des méthodes qui sont pas obligées de marcher, c'est pas flamboyant, comme logique.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Les méthodes dans les interfaces
    Par honeydew dans le forum Langage
    Réponses: 3
    Dernier message: 29/12/2007, 15h55
  2. Réponses: 16
    Dernier message: 26/10/2006, 16h17
  3. fonctionnent de la méthode run dans les threads
    Par L4BiN dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 25/07/2006, 11h06
  4. Les méthodes abstraites et les interfaces
    Par ETI-trian dans le forum Langage
    Réponses: 3
    Dernier message: 17/01/2006, 12h14

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