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

avec Java Discussion :

abstract et methode non redéfini


Sujet :

avec Java

  1. #1
    Membre confirmé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Points : 558
    Points
    558
    Par défaut abstract et methode non redéfini
    Bonjour
    Est ce une "bonne pratique", de ne pas redéfinir tout les méthodes abstraite dans une classe dérivée ?


    mon cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     abstract class  Champ
    ...
          public abstract void setDefaultValue(int value);
     
          public abstract void setDefaultValue(String value);
    ...
    ______________________________________________________
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class  ChampInt extends Champ
    ...
        private int selectedIndex;  
     
     
        public  void setDefaultValue(int value){
          this.selectedIndex = value;             
        }
     
        public  void setDefaultValue(String value) {
    //        //non applicable
        }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class  ChampStr  extends Champ
    ...
        private String stringValue;  
     
     
        public  void setDefaultValue(int value){
           //non applicable         
        }
     
        public  void setDefaultValue(String value) {
       this.stringValue = value;
        }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Champ c = new ChampInt();
    c.setDefaultValue(3)
    Champ d = new ChampStr();
    d.setDefaultValue("Toto");
     
    ...
    Merci de vos suggestions

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    non, si une partie des méthodes n'ont pas de sens pour les classes implémentant ou héritant, alors il n'y a pas de sens à les faire implémenter / hériter de cette classe, il y a un problème de design. Pour ton cas, par exemple, le design correct serait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     abstract class  Champ<T>
    ...
          public abstract void setDefaultValue(T value);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class  ChampStr  extends Champ<String>
    ...
        private String stringValue;  
     
     
     
        public  void setDefaultValue(String value) {
       this.stringValue = value;
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class  ChampInt extends Champ<Integer>
    ...
        private Integer selectedIndex;  
     
     
        public  void setDefaultValue(Integer value){
          this.selectedIndex = value;             
        }
    Ceci dit, il arrive, dans d'autre cas, qu'une interface ou une méthode abstraite définisse certaines opérations comme optionnelles, ou refusent certaines opération. Dans ce cas, la bonne pratique, en général, est, dans la méthode, de lancer une exception UnsupportedOperationException, plutôt que de ne rien faire. C'est utilisé, par exemple, sur les api collections de java, les collection readonly lancent des exceptions sur les méthodes de modification (add, remove, etc).

  3. #3
    Membre confirmé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Points : 558
    Points
    558
    Par défaut
    Merci tchize_

    Avec un Typage java 1.4,
    comment dois-je convertir Champ<T> ?


    ps :
    dans "mon cas" Netbeans, en l'absence de definission d'une méthode abstraite dans une classe dérivée
    propose de lancer une exception UnsupportedOperationException, plutôt que de ne rien faire

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    dans le cas 1.4 faut faire le travail à la main: accepter un Object en paramètre, faire du typecasting.

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

Discussions similaires

  1. [split]methode non définie pour le type string
    Par maniolo dans le forum Langage
    Réponses: 12
    Dernier message: 12/04/2006, 16h59
  2. objShell.CurrentDirectory: methode non trouvee
    Par D[r]eadLock dans le forum VBScript
    Réponses: 4
    Dernier message: 14/12/2005, 18h26
  3. Package present mais methode non reconnu !!
    Par Battosaiii dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 13/12/2005, 10h19
  4. Methode non trouvé sur objet Graphics2D
    Par staive dans le forum 2D
    Réponses: 14
    Dernier message: 26/10/2005, 10h01
  5. [JSF]Probleme de methode non trouvé
    Par VincentP dans le forum JSF
    Réponses: 1
    Dernier message: 12/10/2005, 17h43

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