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
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
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/
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.
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/
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");} }Soit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Truc t = .....; if (t.supportBidule()) t.bidule();
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();
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++
Ç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
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.
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?
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager