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 :

[Interface] méthodes static


Sujet :

Langage Java

  1. #1
    Membre actif
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Points : 268
    Points
    268
    Par défaut [Interface] méthodes static
    Bonjour,

    Je suis souvent conforonté au problème suivant:
    Créer une interface où je déclare des méthodes static.
    Je sais que ce n'est pas authorisé mais si qq'un a un contournement pour arrivé au même résultat je suis preneur car tout les cas ne peuvent pas être réglés avec des classes abstraites pour des raisons d'héritage multiple.

    merci!
    S'il n'y a pas de solutions, il n'y a pas de problème.

  2. #2
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    heu, c'est très limite car les interfaces ne sont normalement là que pour permettre aux classe d'implémenter un certain nombre de service.

    Si tu as besoin d'une méthode de classe, fait l'héritage avec une classe concrète plutôt.
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 145
    Points : 125
    Points
    125
    Par défaut
    Une idée pourrait être d'utiliser un objet composite ou un wrapper.
    Si A contient B et C, tu peux alors utiliser les méthodes statiques de B et C

  4. #4
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    @JMLLB : aurais-tu un exemple concret de difficuté que tu n'as pu résoudre qu'avec des méthodes static ?
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

  5. #5
    Membre actif
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Points : 268
    Points
    268
    Par défaut
    Je vais essayer d'être clair, mais c'est pas gagné:

    J'ai des classes ayant une méthode de génération de conteneur spécifique ne pouvant contenir que des éléments de leur propre classe (ou "proche").
    Ces classes ont aussi une méthode donnant le type de conteneur dont elle ont besoin. Ces deux méthodes sont tout ce qu'il y a de plus "static".
    NB:Je n'ai qu'une classe de conteneur spécifique, leur spécificité leur est assigné à leur création.
    Dans mon interface déclarant ces deux méthodes, je ne peux pas les déclarer statiques.

    J'ai aussi un méta-conteneur ne pouvant contenir que des conteneurs (si on lui rajoute un conteneur d'un type qu'il possède déjà il les fusionne).
    Je peux aussi rajouter directement un object implémentant mon interface car avec la méthode d'identification de type de conteneur je peux retrouver le conteneur approprié.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public interface ISPanelFamilyInterface{
     
    public String getPanelFamilyName();
     
    public ISPanel createPanel();
     
    }
    S'il n'y a pas de solutions, il n'y a pas de problème.

  6. #6
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Si j'ai bien compris la première partie, tu demandes, via une méthode static, à une classe de générer un conteneur pouvant contenir des objets de cette classe ?

    Dans ce cas, pourquoi ne pas confier ce travail à une classe tier ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Conteneur conteneur = FabriqueGenerique.makeConteneur( type );
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Points : 446
    Points
    446
    Par défaut
    Peut être peux tu regarder du côté des generics et de l'introspection ....
    Ce n'est qu'une piste
    Il est agréable d'avoir le choix. La difficulté est alors de faire le bon (ou le moins pire).

  8. #8
    Membre actif
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Points : 268
    Points
    268
    Par défaut
    Citation Envoyé par g0up1l

    Dans ce cas, pourquoi ne pas confier ce travail à une classe tier ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Conteneur conteneur = FabriqueGenerique.makeConteneur( type );
    Je suis d'accord que de ce fait là je n'ai plus besoin de la méthode createPanel dans mon interface mais par contre FabriqueGenerique va avoir besoin d'utiliser getPanelFamilyName pour créer la bon conteneur.

    Je n'ai donc plus qu'une méthode dans mon interface mais elle devrait quand même être statique.
    S'il n'y a pas de solutions, il n'y a pas de problème.

  9. #9
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Ben , non si type = Panel.class, tu n'as plus besoin de 'getPanelFamilyName' .

    Ou tu peux même donner le nom de ta classe dePanel en String :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FabriqueGenerique.makeConteneur( maClassePanel.class );
    ou bien
    FabriqueGenerique.makeConteneur( "monPackage.maClassePanel" );
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

  10. #10
    Membre actif
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Points : 268
    Points
    268
    Par défaut
    Dans le cas nominal d'accord! c'était d'ailleurs comme ça que je faisais au départ. Mais j'ai besoin de regrouper dans des mêmes composants des objets de classes différentes (mais ayant d'autres affinités).
    S'il n'y a pas de solutions, il n'y a pas de problème.

  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Points : 446
    Points
    446
    Par défaut
    Dans ta fabrique, tu peux faire quelque chose du genre:

    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
     
    // L'enumeration des types de familles
    enum PanelFamily {family1, family2, ...}
    public static ISPanel makeContener(PanelFamily family){
      switch family
      {
        case family1:
        case family2:
        ...
        {
           return makeContenerType1();
        }
        case family3:
       ....
        default : ...
       }
    }
    Il est agréable d'avoir le choix. La difficulté est alors de faire le bon (ou le moins pire).

  12. #12
    Membre actif
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Points : 268
    Points
    268
    Par défaut
    Le problème c'est que ça suppose que je sache faire le lien en une Classe et sa famille. Et pour ce faire pour l'instant j'utilise getPanelFamilyName() que je ne peux pas déclarer en static.
    S'il n'y a pas de solutions, il n'y a pas de problème.

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/04/2007, 17h08
  2. Réponses: 16
    Dernier message: 26/10/2006, 16h17
  3. Réponses: 6
    Dernier message: 27/07/2005, 09h06
  4. [debutant] Méthode static
    Par iago dans le forum Langage
    Réponses: 12
    Dernier message: 25/11/2004, 17h09
  5. thread et méthodes static
    Par sylpichard dans le forum MFC
    Réponses: 3
    Dernier message: 02/06/2004, 17h12

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