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 :

Problème lié au cast des objets entre eux


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 58
    Points
    58
    Par défaut Problème lié au cast des objets entre eux
    Bonjour,

    J'ai un petit soucis que je n'arrive pas a résoudre avec les objets que je caste.

    Je veux créer une seule méthode qui prend deux arguments, dont un argument qui peut être de nature différente (ie objet légèrement diffèrent)

    Je met donc object en argument de ma méthode.
    Après avec un simple test (instance of), je reconnais le type d'objet envoyé et j'ai plus qu'a continuer ma méthode.

    Mon Probleme : étant donné que je déclare le type d'objet dans un (if/else) l'ide considère qu'il n'est pas déclare donc ce ne marche pas ).

    Quelqu'un a il une idée pour résoudre ce problème ?

    Un extrait du code ci dessous :

    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
    20
    21
    22
    23
    public void RemplirJtableNonEditable(String requete,Object JtableARemplirObjet)
    {
     
     
     
        if (JtableARemplirObjet instanceof JtableModelAmeliore) 
        {
            JtableModelAmeliore JtableARemplir= (JtableModelAmeliore) JtableARemplirObjet;
        }
        else{
              JtableAmelioreNonEditable JtableARemplir= (JtableAmelioreNonEditable) JtableARemplirObjet;
        }
     
     
        //else (JtableARemplir instanceof JtableARemplirObjet) {JtableAmelioreNonEditable JtableARemplir= (JtableARemplirObjet) JtableARemplir;}
     
     
     
     
        try {
     
    //ERREUR ICI , il ne trouve pas l'instance JtableARemplir
            JtableModelAmeliore modele =JtableARemplir.getModele();
    Merci par avance

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Je pense que tu devrais te renseigner sur la visibilité des variables (à moins que ce ne soit une étourderie).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (JtableARemplirObjet instanceof JtableModelAmeliore) 
        {
            JtableModelAmeliore JtableARemplir= (JtableModelAmeliore) JtableARemplirObjet;
    //maintenant, la variable est accessible
        }
    //ici, JTableARemplir n'existe plus
        else{
              JtableAmelioreNonEditable JtableARemplir= (JtableAmelioreNonEditable) JtableARemplirObjet;
    //ici, tu crées une nouvelle variable différente de la première
        }
    //ici, la dernière JTableARemplir n'existe plus non plus
    La visibilité d'une variable est dans son bloc (et dans les blocs de niveau inférieur).

    Tout ce que tu as à faire, c'est donc de déclarer ta variable avant le bloc if-else d'initialisation.

    De mon côté, je ferai plutôt deux méthodes : une qui prend une String et un JTableAmeliore en argument, et l'autre qui prend une String et un JTableAmelioreNonEditable.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    Pour ton problème de déclaration de variable je n'ajouterais rien de plus que ce qu'a dit Hizin.

    Par contre pour ton algo , je me pose des questions. y a t'il un lien entre JtableModelAmeliore et JtableAmelioreNonEditable ?

    je pense a un lien du genre JtableAmelioreNonEditable hérite de JtableModelAmeliore. Si c'est le cas alors le code devrait plutôt être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void RemplirJtableNonEditable(String requete,JtableModelAmeliore JtableARemplir)
    {
        try {
            JtableModelAmeliore modele =JtableARemplir.getModele();
    ....
    si ce n'est pas le cas alors je te conseil de faire une interface qui défini la méthode getModele(). Ensuite JtableModelAmeliore et JtableAmelioreNonEditable implémente cette interface.
    Enfin ta méthode prendra comme deuxième argument un objet du type de l'interface que tu viens de créer !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    En fait, JtableAmelioreNonEditable et JtableModelAmeliore hérite toute les deux de l'objet Jtable de base. Après j'ai ajouté des méthodes spécifique a chaque objet pour répondre à mes besoins.

    Par rapport à la solution de Hizin je ne veux justement pas faire deux méthodes qui font le même boulot en l'occurrence simplement parce que j'ai fait deux objets quasi identique. (JtableAmelioreNonEditable et JtableModelAmeliore )

    Toutefois, le passage par la déclaration de l'interface me plait beaucoup. Je vais tenter de faire ca et je reviens vers vous.

    Merci encore d'avoir passé du temps sur mon probleme.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    Pour ceux que ca interesse, passer par une interface donne ça :

    Declaration interface

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public interface InterfaceJtableMaison {
     
     
     
        public JtableModelAmeliore getModele();    
     public void setModel(JtableModelAmeliore dataModel); 
     
     
     
    }
    Declaration des enfants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class JtableAmeliore extends JTable implements InterfaceJtableMaison  {
     
        JtableAmeliore jta;
     
        public JtableModelAmeliore getModele() {
            return modele;
        }
     
            public void setModel(JtableModelAmeliore dataModel) {
          super.setModel(dataModel);
        }
     
    }

    Utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void RemplirJtableAvecUneRequete(String requete,InterfaceJtableMaison JtableARemplir)
    {
     
     
     
     
        try {
     
            JtableModelAmeliore modele =JtableARemplir.getModele();
    Merci encore

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

Discussions similaires

  1. Lier des objets entre eux !
    Par laurent94 dans le forum Powerpoint
    Réponses: 4
    Dernier message: 26/05/2015, 03h05
  2. articuler des objets entre eux ?
    Par tichodrome dans le forum Flash
    Réponses: 0
    Dernier message: 23/06/2011, 12h27
  3. connecter des objets entre eux
    Par etienne.clopeau dans le forum Général Python
    Réponses: 6
    Dernier message: 10/02/2010, 19h43
  4. problème avec la persistance des objets
    Par gentil dans le forum Hibernate
    Réponses: 15
    Dernier message: 04/04/2007, 11h44
  5. [WinForms]Comment partager des objets entre threads ?
    Par AiSpirit dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 16/08/2006, 08h57

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