Puzzler Java
12 oct. 2012
Un petit puzzler Java pour se détendre ?.
Considérons le programme Java suivant :
public class TernaryPuzzler1 {
public static void main(String[] args) {
System.out.println(getBase(true) instanceof Sub1);
System.out.println(getBase(true));
}
private static Base getBase(boolean condition) {
Base result = condition ? new Sub1() : new Sub2();
return result;
}
}
class Base {
}
class Sub1 extends Base {
@Override
public String toString() {
return "Sub1";
}
}
class Sub2 extends Base {
@Override
public String toString() {
return "Sub2";
}
}
Que se passe-t-il lorsqu'on l'exécute? Ne vous inquiétez pas, il n'y a pas de piège. Oui, la condition est
vraie, donc une instance de Sub1
est retournée, et les lignes suivantes s'affichent donc à l'écran :
true
Sub1
Maintenant appliquons le même code aux classes Number
, Long
et Double
:
public class TernaryPuzzler2 {
public static void main(String[] args) {
System.out.println(getNumber(true) instanceof Long);
System.out.println(getNumber(true));
}
private static Number getNumber(boolean condition) {
Number result = condition ? new Long(10L) : new Double(20.0);
return result;
}
}
Que se passe-t-il lorsqu'on l'exécute? Attention, là, il y a un piège. Cliquez ici pour afficher la réponse.
Si vous voulez comprendre pourquoi, lisez donc la réponse à cette question sur StackOverflow, qui a inspiré ce post.
Nos livres en vente
Deviens un ninja avec Angular

Notre livre sur Angular à prix libre, maintenu à jour, en français et en anglais
Deviens un ninja avec Vue

Notre livre sur Vue à prix libre, maintenu à jour, en français et en anglais
Prochaines sessions de formation
- Du 22 sept. 2025 au 25 sept. 2025Angular : de Ninja à Héros (à distance)
- Du 6 oct. 2025 au 9 oct. 2025Angular : de Zéro à Ninja (à distance)