56 votes

Pourquoi ne puis-je pas retourner un appel de méthode d'annulation?

 void run() {
    ...
    if (done) return cancel();
    ...
}
 

cancel() return void . Cela ne compilera pas ... et je peux presque comprendre pourquoi. Mais si je veux retourner un vide d'un vide, pourquoi pas? Au lieu de cela, je finis par écrire quelque chose comme ceci:

 if (done) {
    cancel();
    return;
}
 

Je ne cherche pas de suggestions de style de code, je veux savoir pourquoi Java interdit expressément ce type de retour à vide. Toute information est appréciée, merci.

-tjw

25voto

Johan Sjöberg Points 20759

C'est une question intéressante. Depuis java impose un type de retour (void est un type de retour) de votre première déclaration semble faire sens. J'aimerais profiter de cette seule pour la convention. Depuis void est un espace réservé et n'est pas un objet, il a probablement été décidé de le laisser sortir de la langue de cohérence ou le compilateur de la simplicité.

De JLS

Une instruction de retour avec aucune Expression doit être contenue dans le corps d'une méthode qui est déclarée, en utilisant le mot-clé void, de ne pas renvoyer une valeur (§8.4), ou dans le corps d'un constructeur (§8.8).

plus

Pour être précis, une instruction de retour avec aucune Expression se termine toujours de façon brutale, la raison d'être de retour avec aucune valeur

24voto

Jon Skeet Points 692016

Une instruction de retour avec une expression renvoie la valeur de cette expression. Le type d' cancel() est un vide d'expression - il ne doit pas avoir une valeur.

Logiquement vous voulez exécuter cancel(), puis de retour de sorte que ce que vous avez à dire. Les deux actions (en appelant cancel() puis de retour) sont logiquement distinctes.

Maintenant Java pourrait avoir une sorte de "unité de type" au lieu de void - mais qui aurait une incidence sur plutôt que de simplement les valeurs de retour.

9voto

M M. Points 29201

C'est comme l'écriture:

void v=(void)1; 
return (v);

Alors, je pense qu' void n'est pas un type en Java.

En C++, return cancel(); est légal.

En tant que programmeur C++ qui familier avec Java, la réponse est: Beaucoup de choses ne sont pas pris en charge dans la syntaxe Java. Peut-être pour des raisons de simplicité ou de lisibilité.

Remarque: Un void f() déclaration est similaire à un procedure f() dans la déclaration de pascal et de procédure ne peuvent pas renvoyer une valeur telles que les fonctions, de sorte que nous devons les appeler dans un coin de la déclaration.

7voto

michael667 Points 2703

void n'est pas un type. Si vous utilisez le type Void au lieu du mot clé void , toutefois, votre code fonctionnera, mais: vous devrez manuellement return null dans tous les points de sortie de votre méthode.

5voto

Bozho Points 273663

Parce que vous ne renvoyez pas void . void n'est pas une valeur, elle ne peut donc pas être retournée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X