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 :

[Début.] Les CAST


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Par défaut [Début.] Les CAST
    Bonjour, pardonnez ma noobitude mais les CAST me posent un gros problème. En fait, je ne vois pas bien l'utilité des cast et leur fonctionnement. En fait cela permet de convertir le type d'une variable en un autre ... Mais à quoi cela peut il servir? Et existe t il une méthode permettant ces conversions?
    MercI

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    bonsoir,
    sans tenter d'être exhaustif (un bon bouquin te dira tout sur le sujet), il faut distinguer la conversion de type entre données de types primitifs (numériques) et entre objets.
    Dans le 1er cas, cela te permet par exemple de convertir un entier (int) en flottant (float, long) ou réciproquement. Connaissant les types de base numériques : byte, short, int, long, char, float, double, tu devines le nombre de conversions possibles.

    Dans le 2nd cas, tu convertis un objet d'un type A vers un type B :

    A a = new ...
    B b = (B) a;

    La conversion est possible si l'une des conditions suivantes est remplie :
    1) B est une super-classe de A (ce qui revient au même : A est une classe héritée de B), cette conversion s'appelle le upcasting, on dé-spécialise l'objet "a". Dans ce cas l'opérateur de conversion (B) n'est pas obligatoire :
    B b = a;
    2) B est une classe héritée de A, "a" est donc une instance de B, cette conversion s'appelle le downcasting, on spécialise l'objet "a" mais il faut être sûr qu'il soit bien de type B, sinon l'exception ClassCastException est levée. Tu as le droit d'écrire :
    A a = new B();
    B b = (B) a;
    si B est une classe héritée de A.

    Sans compter que tu peux aussi convertir un objet "o" de type "O" vers "I" si I est une interface et "O" implements "I"...
    Tu trouveras plein d'exemples d'utilisation des conversions d'objets en parcourant les messages du forum.

  3. #3
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    Par exemple, tu veux faire une calculatrice qui additionne deux nombres.
    Tu as 2 champs pour saisir tes 2 nombres. Les champs de texte (TextField) reçoivent des chaines (String). Pour additionner les deux nombres, il faut donc les convertir en entier (int).
    Parfois le cast n'est pas possible (cf la réponse précédante).
    Par exemple pour convertir une String en int, on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int nombre = Integer.parseInt(ta_chaine);
    La méthode parseInt() de la classe Integer permet donc cette conversion.

    Inversement, on peut vouloir convertir un int en String afin de l'insérer dans le champ de texte. Cela se fait de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int nombre = 15 ;
    String chaine = Integer.toString(nombre);
    Nas'

  4. #4
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Citation Envoyé par Nasky
    Par exemple, tu veux faire une calculatrice qui additionne deux nombres.
    Tu as 2 champs pour saisir tes 2 nombres. Les champs de texte (TextField) reçoivent des chaines (String). Pour additionner les deux nombres, il faut donc les convertir en entier (int).
    Parfois le cast n'est pas possible (cf la réponse précédante).
    Par exemple pour convertir une String en int, on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int nombre = Integer.parseInt(ta_chaine);
    La méthode parseInt() de la classe Integer permet donc cette conversion.

    Inversement, on peut vouloir convertir un int en String afin de l'insérer dans le champ de texte. Cela se fait de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int nombre = 15 ;
    String chaine = Integer.toString(nombre);
    Nas'
    C'est un peu dangereux ton explication parceque le fait de transformer un String en Integer n'as rien à voir avec le CAST est c'est une confusion souvent rencontrée pour les débutants.

    Alors soyons clair: qui dit cast implique forcémment une relation d'héritage sous-jacente.

    De plus il existe deux règles fondamentales qui te permettent d'affirmer qu'un classe peut être "castée" en une classe:

    - si B est une sous-classe de A (B extends A) alors dans tout les cas tu peux faire A test = (A) b;

    - sinon si B est une sous-classe de A (B extends A), soit une classe C tu peux caster c (c étant une instance de C) en B que si c instance B est vrai.

  5. #5
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut Re: [Début.] Les CAST
    Citation Envoyé par Sylvester
    Et existe t il une méthode permettant ces conversions?
    Je ne faisais que répondre à cette question. Je ne pense pas avoir dépassé les limites du sujet. Ou alors j'ai mal compris cette question...

    Nas'

  6. #6
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    C'est pas du tout un reproche pour toi, au contraire ton explication est convaincante... Tu as bien fais de préciser ce point, mais comme je le disais plus haut, pour les débutants c'est une grande source de confusions. Je voulais donc seulement préciser les deux concepts pour qu'il n'y ai pas d'amalgame et d'abus de langage comme je l'ai souvent vu.

  7. #7
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    juste une petite précision : les casts servent beaucoup dans les collections.
    Par exemple, les fonctions pour acceder aux membres d'un ArrayList ou d'une LinkedList retournent des Object, qu'il faut ensuite caster en ce qui est vraiment contenu.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    monArrayList.add("coucou");
    String s = (String)monArrayList.get(0);
    kapiche ? sinon je pense que la faq explique ca non ?

  8. #8
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Oui tu as tout à fait raison mavina maic java 5 ajoute une notion de collection typée, enfin les créateurs de java on découvert qu'il pouvait exister des collections typées: les Generics...

    Cf le forum pour plus de docs...

  9. #9
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    ah c'est interessant, v regarder ca de plus pres tiens

  10. #10
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Par défaut
    Merci pour vos réponses à tous...

    Par contre j'ai remarqué que sur ce forum dans les cours de Java on ne parle pas des arbres binaires, des listes chainés et doublements chainés. C'est bien cela ou j'ai mal regardé? Par contre sur C++ on en parle

  11. #11
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    Ce n'est pas aussi évident en Java qu'en C/C++ car y'a pas de pointeurs (certes, y'a les références).

    Nas'

  12. #12
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    ca reste le meme principe... Personnellement, mes profs nous ont fait faire des liste chainées et doublement chainées en JAVA, apres avoir fait du C++.
    Il n'y a rien de compliqué, ca reste des collections, regarde la Javadoc, ca doit etre expliqué.
    (en java, les listes chainées sont l'objet LinkedList ... )
    Si tu veux des précisions, pose on te répondra

  13. #13
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Par défaut
    Ouech ouech merci à tous... en plus en aout je me lance dans mon projet d'informatique qui est en fait censé gerer une bibliothèque. Ca doit etre simple pour vous 8) alors je viendrai vous montrer mes chtits algorithmes et vous poser des questions si j'ai un pb qq part... Je sens que je vais morfler pendant ce projet...L'assistant nous a dit que en une apre midi c possible de le terminer . Mais le pb c'est que je n'ai jamais eu le déclic dans ce cours... tout les autres ca passe à fond, mais programation j'ai l'impression d'etre face à un truc d'extra terrestre;...


  14. #14
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    Citation Envoyé par mavina
    ca reste le meme principe... Personnellement, mes profs nous ont fait faire des liste chainées et doublement chainées en JAVA, apres avoir fait du C++.
    Il n'y a rien de compliqué, ca reste des collections, regarde la Javadoc, ca doit etre expliqué.
    (en java, les listes chainées sont l'objet LinkedList ... )
    Si tu veux des précisions, pose on te répondra
    Oui je sais bien. J'avais jamais mis ça en pratique en fait
    Je viens d'essayer mais sans passer par la classe LinkedList.
    J'ai tout simplement fait une classe "node" avec un attribut "next" de type "node" qui fait office de pointeur. Et en effet, ça marche super bien. Je dirais même que c'est encore plus simple qu'en C

    Nas'

Discussions similaires

  1. Les casts en C++
    Par Invité dans le forum Débuter
    Réponses: 7
    Dernier message: 15/05/2010, 12h39
  2. GLSL : les casts
    Par zenux dans le forum OpenGL
    Réponses: 4
    Dernier message: 12/06/2008, 00h35
  3. petite question sur l'héritage et les cast
    Par baedal dans le forum Langage
    Réponses: 3
    Dernier message: 29/02/2008, 00h48
  4. Question sur les casts
    Par nicolas66 dans le forum C++
    Réponses: 3
    Dernier message: 16/03/2006, 19h03

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