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 :

Erreur "inconvertible Types"


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Erreur "inconvertible Types"
    Bonjour,

    J'ai cet exercice en Java :
    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
    24
    25
    26
    27
    28
    29
    30
    public class Test
    {
    static void show(int i) 
    {
         System.out.println(" méthode 1 " + i) ;
    }
    static void show(char c) 
    {
         System.out.println("méthode 2 " + c) ;
    }
    static void show(double d) 
    {
         System.out.println("méthode 3 " + d) ;
    }
    static void show (String s)
    {
         System.out.println("méthode 4 " + s) ;
    }
    static void show(Participante b)
    {
         System.out.println("méthode 5 " + b) ;
    }
    public static void main(String[] args)
    {
       Object x = "Natacha";
       String y = "Natacha";
       //show((Participante)y) ; // erreur compilation POURQUOI INCONVERTIBLE? 
       show((Participante)x) ; // erreur Interpréteur 
    }
    }
    Pourquoi la ligne 27 ne se compile pas alors que la 28e se compile ?

    Message d'erreur :
    Test.java:26: error: inconvertible types
    show((Participante)y) ; // erreur compilation POURQUOI INCONVERTIBLE?
    ^
    required: Participante
    found: String
    1 error
    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    C'est ton Objet Participante.
    Fait lui au moins une méthode toString pour l'afficher dans un println.

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Tout simplement car il faut distinguer le type réel de l'objet, et son type déclaré.
    Lors d'un cast le compilateur ne voit que le type déclaré, tandis qu'à l'exécution le type réel est vérifié...

    Dans le premier cas, le type réel de l'objet est String ("Natacha"), tout comme son type déclaré (String y) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String y = "Natacha";
     
    show((Participante)y); // Erreur de compilation
    Le compilateur sait qu'un objet de type "String" ne pourra jamais être casté vers le type "Participante".
    Du coup il génère une erreur de compilation.

    Dans le second cas, le type réel de l'objet est toujours String ("Natacha"), mais son type déclaré est Object, et pour le compilateur cela change tout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Object x = "Natacha";
     
    show((Participante)x) ; // ClassCastException à l'exécution
    Pour le compilateur, "x" est de type Object (et donc potentiellement de n'importe quel type. Donc il est possible que "x" référence un objet de type Participante. Il ne génère donc pas d'erreur...
    Mais du coup à l'exécution la JVM voit que cela n'est pas le cas, et cela produit un ClassCastException !

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    C'est cela ! merci bien .

    Donc quand je remplace show((Participante)y) à la ligne 27 par show((Object)y)
    (et j'ai ajouté une fonction qui accepte object) Il compile.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/08/2006, 09h14

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