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

  • ovulos clindamicina

    […] ovulos clindamicina[…]

    ovulos clindamicina