7
votes

Pourquoi la méthode nécessite-t-elle une valeur de retour après la déclaration qui retourne toujours vrai?

Pourquoi cette méthode (test) a-t-elle besoin d'une valeur de retour (elle est toujours vraie)? XXX

et quand j'ai ajouté une valeur de retour, elle met en garde comme "morte Code " . Alors, pourquoi n'accepte pas le premier test () méthode xxx


4 commentaires

Si une déclaration sera toujours vraie, vous ne pouvez pas simplement supprimer la déclaration?


C'est juste un test. Je n'ai aucune méthode qui retourne toujours vrai :)


Donc, cela ne sera donc pas toujours vrai, il y a donc plus d'un chemin à travers le code, vous avez donc besoin d'une déclaration de retour pour chaque chemin


Il peut être utile d'indiquer quel compilateur Java vous utilisez.


5 Réponses :


2
votes

C'est le résultat de la profondeur de l'analyse que le compilateur fait.


0 commentaires

11
votes

L'analyse de la méthode return n'analyse pas la condition si pour voir si elle est toujours vraie ou false, comme il ne serait généralement pas une constante de temps de compilation (sinon, vous n'écririez pas un si en premier lieu). Il voit simplement qu'il existe un si qui pourrait ou n'a pas pu être pris, et s'il n'est pas extrait, la méthode ne renvoie pas une valeur, d'où l'erreur.

L'analyse du code mort est effectuée dans une passe distincte à l'analyse de retour de la méthode, qui fait une analyse plus approfondie qui ressemble à des conditions de branche intérieures.

Mes suppositions entièrement non informées, ce comportement est un artefact de la mise au point du compilateur; L'analyse de la méthode de retour est une partie essentielle de la compilation afin de vous assurer d'obtenir un programme valide à la fin, d'abord l'une des fonctionnalités principales mises en œuvre en premier. L'analyse de code mort est un «agréable à avoir», ce qui a été mis en œuvre plus tard, en utilisant des algorithmes plus sophistiqués (car les bits de compilateur de base ont été terminés par ce stade)


1 commentaires

+1 pour souligner que le compilateur n'évaluera pas si les conditions



1
votes

Cette méthode ne fait rien, alors oui, c'est du code mort. Si la méthode revient toujours true, vous n'avez pas besoin de l'appeler, il suffit d'utiliser true à la place.


2 commentaires

C'est juste un test. Je n'ai aucune méthode qui retourne toujours vrai :)


@hilal, le compilateur essaie de détecter des bugs courants, il n'essaie pas de gérer tous les cas théoriques possibles et d'essayer de déduire ce que vous voudrez peut-être arriver.



1
votes

En Java, si vous spécifiez un type de retour (Boolean), vous devez spécifier explicitement la valeur, que ce soit toujours le même. Cela soulève la question suivante: Si c'est toujours la même chose, pourquoi retourner quoi que ce soit? Vous connaissez déjà la réponse dans le code d'appel.

Pourquoi pas seulement écrire: xxx

comme pour la deuxième partie de votre question, le compilateur voit que le deuxième chemin est jamais pris dans la déclaration de si et vous donne un avertissement à ce sujet.


0 commentaires

0
votes

Si vous testez quelque chose, cela peut être une valeur ou une autre valeur. Donc, vous ne pouvez pas garantir que cela va entrer dans l'instruction IF.

return someBoolean;


0 commentaires