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 :

Problème casting d'un Runnable


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10
    Par défaut Problème casting d'un Runnable
    Bonjour à tous,

    Je vous mets un bout de code explicatif de mon problème :

    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
     
    public class ClassA implements Runnable
    {
    // Pas important
    }
     
    public class Main
    {
        public static void main (String  args [])
        {
            Vector  v = new Vector ();
     
            v.add (new Thread (new ClassA ()));
     
            ClassA  cA = (ClassA) v.get (0); // <-- **
        }
    }

    ** Main : java.lang.ClassCastException: java.lang.Thread cannot be cast to ClassA

    Comment faire si je veux revenir sur une ClassA à partir du vecteur de Thread ?

    Merci

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 689
    Par défaut
    Y a il quelque chose qui t'empêches de faire hériter ClassA de Thread? Ça serait sans doute la solution la plus simple a ton problème car les objet Thread n'ont pas de méthode qui retourne l'objet Runnable qui leur a été fourni au constructeur.
    Une autre idée serait que tu crées une classe qui hérite de Thread avec un fonction qui retourne l'objet passé en paramètre au constructeur.

    Sinon je te conseille aussi d'utiliser un ArrayList plutôt que les Vector, et d'utiliser les génériques si possible.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10
    Par défaut
    Bonsoir Uther,

    Ma ClassA étend déjà une autre classe, ce qui m'empêche effectivement d'étendre Thread.

    Y-aurait'il une autre solution ?

  4. #4
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 689
    Par défaut
    Comme je te l'avais proposé tu pourrais utiliser une classe comme celle ci pour remplacer Thread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Thread2<E extends Runnable> extends Thread{
        private E runnable;
     
        public Thread2(E r) {
            super(r);
            runnable = r;
        }
     
        public E getRunnable(){
            return runnable;
        }
    }
    ainsi tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        public static void main (String  args [])
        {
            Vector<Thread2<ClassA>>  v = new Vector<Thread2<ClassA>>();
     
            v.add (new Thread2<ClassA> (new ClassA ()));
     
            ClassA  cA = v.get (0).getRunnable(); // <-- **
        }

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10
    Par défaut
    Hum, très intéressant.

    Je me suis rendu compte que je pouvais me débrouiller pour enlever l'extends déjà existant.
    Je vais donc étendre Thread, ce qui me simplifie la vie.

    Néanmoins, je garde cette solution dans un coin

    Merci pour ces réponses Uther,

    A bientôt

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

Discussions similaires

  1. Problème cast de type 'ASP.masterpage_master'
    Par vinzestia dans le forum ASP.NET
    Réponses: 1
    Dernier message: 09/01/2008, 14h58
  2. ORA-00910 Probléme Cast
    Par D_light dans le forum Oracle
    Réponses: 2
    Dernier message: 13/11/2007, 11h16
  3. Problème Cast char* en std::string
    Par inovah dans le forum SL & STL
    Réponses: 1
    Dernier message: 30/10/2007, 16h32
  4. Problème : cast spécifié n'est pas valide.
    Par paradeofphp dans le forum ASP.NET
    Réponses: 13
    Dernier message: 30/08/2007, 18h10
  5. Problème Cast avec NULL values
    Par WwiloO dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/10/2005, 10h49

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