1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public static void main(String[] args) {
Integer i = 42; // n est du type Integer et 42 est du type Integer
Number n = 2021; // n est du type Number et 2021 du type Integer : Number étant une généralisation de Integer, alors pas de problème d'affectation et cast inutile
Number cn = i; // cn est du type Number et i du type Integer : Number étant une généralisation de Integer, alors pas de problème d'affectation et cast inutile
Object x = i; // x est du type Object et i du type Integer : Object étant une généralisation de Integer, alors pas de problème d'affectation est cast inutile
Integer si = (Integer)x; // x contient bien un Integer, mais le type de si (Integer), n'est pas une généralisation du type de x (Object), donc il faut caster
Number sn = (Integer)x; // x contient bien un Integer, mais le type de sn (Number), n'est pas une généralisation du type de x (Object), donc il faut caster
Integer ok = (Integer)n; // n contient bien un Integer, même s'il est du type Number, mais le type de ok (Integer), n'est pas une généralisation du type de n (Number), donc il faut caster
n = 1.5d; // je mets un Double dans n (cast inutile)
// Integer err = (Integer)n; // n contient un Double, mais le type de err (Integer), n'est pas une généralisation du type de n (Number), donc il faut caster pour compiler, mais ça plantera à l'exécution
// ici, si tu décommentes la ligne juste avant, tu auras une exception java.lang.ClassCastException: class java.lang.Double cannot be cast to class java.lang.Integer
} |
Partager