Puzzler Java
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.