dans java, Java core, POO

Le cast en java

Nous allons voir dans cet article le cast en java.

Rappel : en Java, les variables sont soit de type primitive, soit des références vers des instances d’une classe.

Casting :

Le cast est le fait de forcer le compilateur à considérer une variable comme étant d’un type qui n’est pas le type déclaré ou le type réel de la variable.

Il faut savoir que Java est un langage fortement typé. En effet, il permet de s’assurer que les conversions entre types sont correctes :

Si votre code comporte des erreurs de ‘casts’ évidentes, l’erreur sera remonté au moment de la compilation.

Si votre code comporte des erreurs de ‘cast’ non évidentes, le problème sera visible lors de l’exécution.

Upcasting :

Upcasting: classe fille => classe mère, il se fait d’une manière implicite.

En java, tous les objets dérivent de la classe de base Object. Ainsi le code suivant fonctionnera toujours.

String str1 = "Hello world";
Object obj = str1; // Pas besoin de cast – cette conversion fonctionne toujours

L’upcasting fonctionne toujours, vous n’avez pas besoin de vous y préoccuper, on convertit ici un String en Object. Une voiture sera en effet, toujours un véhicule.

Downcasting :

Downcasting: classe mère => classe fille, il se fait explicitement.

En effet, convertir un objet vers un objet de type dérivé peut échouer.

Le code suivant :

String str2 = "Hello world";
String str2 = obj;

va renvoyer cette erreur :

erreur de compilation - types incompatibles
found   : java.lang.Object
required: java.lang.String

Pour régler cette erreur, vous avez besoin de ‘downcaster’ explicitement en String :

String str2 = (String) obj;

Cependant le downcasting peut échouer, en générale, cela arrive quand vous downcastez un objet vers un type d’objet que vous ne pouvez pas downcaster.

Quand vous faites du downcasting, il est donc dans votre responsabilité de vous assurer que le downcasting que vous faites est valide sinon vous aurez une ‘runtime exception’.

Résumé par un dernier exemple :

Soit la classe Downcast.java

// Pour comprendre comment le downcasting échoue
class Downcast {
        public static void main(String []args) {
                
                Integer i = new Integer(10);
                
                // upcast - ok
                Object obj = i;
                
                // downcast - will it succeed? What will happen when it fails?
                String str = (String) obj;     } 
                }

Voici la runtime exception généré :

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to
java.lang.String at Downcast.main(Downcast.java:11)

Dans ce programme, on déclare une variable i de type Integer et on fait pointer obj de type Object vers i.  Cette conversion est un upcast et fonctionne toujours. Maintenant quand on essaye de convertir obj en un objet de type String, on fait un downcast. Le compilateur ne sait pas dynamiquement le type d’objet vers lequel obj pointe, (vous savez ici que vers obj pointe vers un Integer). Avec un cast explicite, vous forcez le compilateur à convertir obj de type Object vers un String. Comme un Integer ne peut pas être converti en String cela échoue en lançant une ClassCastException.

 

Ecrire un Commentaire

Commenter

Webmentions

  • generic cialis pills

    […] walgreen cialis price […]

  • how to buy cialis online

    […] cialis usa […]

  • 100mg generic viagra blue pill 100 on one side

    […] buy viagra 25mg […]

  • how to get cialis online

    […] cialis price […]

  • cialis generic

    […] difference between cialis and cialis professional […]

  • how to buy cialis online

    […] cialis professional […]

  • viagra 50mg price

    […] cialis company […]

  • kamagra online krmeno ex

    je legální koupit kamagra online z kanady

    obrázky kamagra lékových štítků

  • discount xifaxan generic low price

    ordering xifaxan uk in store

    buy xifaxan generic new zealand

  • canadian discount rifaximin

    discount rifaximin cheap where

    does rifaximin really work

  • cheap avodart generic discount

    purchase avodart online canada

    order avodart price at walmart

  • online order staxyn generic next day delivery

    order staxyn cheap europe

    buying staxyn purchase online uk

  • get itraconazole generic form

    buy cheap itraconazole buy virginia

    get itraconazole generic online pharmacy

  • buy cheap fildena cheap prescription

    buying fildena non prescription online

    cheapest buy fildena price uk

  • get gabapentin cheap in canada

    buying gabapentin generic version

    online order gabapentin generic in usa

  • get dutasteride uk online

    cheap dutasteride usa price

    cheap dutasteride purchase in the uk

  • online order flexeril cyclobenzaprine generic drug india

    purchase flexeril cyclobenzaprine no rx needed

    cheap flexeril cyclobenzaprine generic pharmacy in canada

  • online order androxal buy dublin

    ordering androxal purchase from canada

    how to order androxal without prescriptions uk

  • au comptoir kamagra alternative

    kamagra londres au comptoir

    acheter kamagra pharmacie vente cependant

  • order enclomiphene canada purchase

    buy enclomiphene uk where buy

    how to buy enclomiphene cheap online canada

  • ginseng and zinc benefits for men

    […] ginseng root tea for stamina […]

  • cheap viagra 25mg

    […] street value viagra 100mg […]

  • generic cialis 20mg

    […] how much does generic cialis cost […]

  • generic cialis no prescription

    […] how can i get cialis […]

  • sildenafil pfizer 25 mg

    […] viagra 100 mg for sale […]

  • purchase clomid online

    […] clomid 50mg […]

  • rybelsus pills

    […] buy rybelsus […]

  • ovulos clindamicina

    […] ovulos clindamicina[…]

    ovulos clindamicina