Comment effectuer un cast entre types compatibles et gérer l'échec ?
(TypeCible) objet dans un bloc try { ... } catch (ClassCastException e) { ... }Savoir effectuer un cast vers un type plus précis et gérer proprement l'exception si le cast échoue.
Savoir effectuer un cast vers un type plus précis et gérer proprement l'exception si le cast échoue.
Un cast (TypeCible) objet est vérifié dynamiquement par la JVM : si l'objet n'est pas réellement une instance de TypeCible, une ClassCastException est levée — à capturer dans un catch si l'échec est possible.
try { TypeCible var = (TypeCible) objet; ... } et utiliser var pour accéder aux membres spécifiques de TypeCible.catch (ClassCastException e) { ... } pour gérer proprement le cas où le cast échoue.instanceof avant le cast pour éviter l'exception si le type est incertain.Caster un objet Vehicule vers Voiture pour accéder à nombrePlaces, en gérant le cas où l'objet n'est pas une Voiture.
La variable est de type Vehicule mais on soupçonne qu'elle contient une Voiture.
Vehicule v = new Voiture("AB-123", 2020, 5);
// Vehicule n'a pas le champ nombrePlaces
// Pour y accéder, on doit caster vers Voiture
try { TypeCible var = (TypeCible) objet; ... } et utiliser var pour accéder aux membres spécifiques de TypeCible.Cast dans un bloc try.
try {
Voiture voit = (Voiture) v;
System.out.println("Nb places : " + voit.nombrePlaces);
} catch (ClassCastException e) {
System.out.println("Ce n'est pas une Voiture");
}
catch (ClassCastException e) { ... } pour gérer proprement le cas où le cast échoue.Tester avec un objet qui n'est pas une Voiture.
Vehicule moto = new Moto("ZZ-999", 2022);
try {
Voiture voit = (Voiture) moto; // échoue
} catch (ClassCastException e) {
System.out.println("Ce n'est pas une Voiture"); // affiché
}
instanceof avant le cast pour éviter l'exception si le type est incertain.Alternative plus propre : vérifier avec instanceof avant.
if (v instanceof Voiture) {
Voiture voit = (Voiture) v; // sûr ici
System.out.println(voit.nombrePlaces);
}
Le cast (Voiture) v permet d'accéder à nombrePlaces ; ClassCastException est levée si v n'est pas une Voiture.
Dans la méthode equals(Object o), caster o vers Point pour comparer les coordonnées.
Caster des éléments d'un tableau Object[] vers String pour en calculer les longueurs.
Crée ton compte gratuit pour accéder à la fiche et aux exercices