Pourquoi l'expression switch
n'autorise-t-elle pas les valeurs long
, float
, double
ou boolean
en Java? pourquoi seuls int
(et ceux qui sont automatiquement promus en int
) sont-ils autorisés?
Float et double seraient difficiles à utiliser de manière fiable même s'ils étaient possibles - n'oubliez pas que l'exécution de correspondances d'égalité exactes sur float/double est généralement une mauvaise idée de toute façon, en raison de la nature de la représentation.
Pour les valeurs booléennes, pourquoi ne pas simplement utiliser if
pour commencer?
Je ne me souviens pas jamais vouloir allumer l'un de ces types, pour être honnête. Avez-vous un cas d'utilisation particulier à l'esprit?
Vous pouvez utiliser enum
dans une instruction switch et Java 7 ajoutera la chaîne AFAIK. L'instruction switch vient de C où seuls les int étaient autorisés et l'implémentation d'autres types est plus compliquée.
Les nombres à virgule flottante ne sont pas un bon choix pour le changement car la comparaison exacte est souvent rompue par des erreurs d'arrondi. par exemple. 0.11 - 0.1 == 0.01
c'est faux.
activer booléen n'est pas très utile car une simple instruction if
serait plus simple
if(a) {
} else {
}
ne serait pas plus simple avec
switch(a) {
case true:
break;
case false:
break;
}
BTW: J'utiliserais switch (long) s'il était disponible, mais ce n'est pas le cas. C'est un cas d'utilisation rare pour moi de toute façon.
Pour float et double float et double, je suppose qu'ils l'ont omis pour les mêmes raisons que pourquoi c'est une mauvaise idée de les comparer en utilisant ==
.
Pour booléen, cela peut être simplement parce que cela correspondrait à une instruction if
de toute façon. N'oubliez pas que vous ne pouvez avoir que des constantes dans les expressions de cas, donc les cas correspondraient toujours à if (someBool)
et if (!someBool)
.
Pour long
je n'ai pas d'explication. Il me semble qu'une telle fonctionnalité aurait peut-être dû être incluse lors de la conception du langage.
Généralement, la structure à casse de commutation est utilisée lors de l'exécution de certaines opérations basées sur une variable d'état. Là, un int a plus qu'assez d'options. Boolean n'en a que deux donc un normal est généralement assez bon. Les doubles et les flotteurs ne sont pas vraiment précis pour être utilisés de cette façon.
Franchement, je ne peux pas imaginer un cas d'utilisation pour ce genre de choses, aviez-vous un problème pratique à l'esprit avec cette question?