Un autre aspect:
Java est un langage statique avec des fonctionnalités assez strictes. Cela signifie que beaucoup de choses qui seraient assez ouvertes ou dynamiques dans d'autres langues (c / f Ruby, Lisp, etc.) sont strictement déterminées.
Ceci est une décision de conception générale. Il est difficile de répondre au "pourquoi" (enfin, car les concepteurs de la langue ont pensé que ce serait bien!). Le "pour quoi" est assez clair: il permet au compilateur de détecter beaucoup d'erreurs, ce qui est généralement une très bonne fonctionnalité pour toutes les langues. Deuxièmement, il est relativement facile de raisonner sur la langue. Par exemple, il est relativement facile de créer des preuves de correction formelles dans (des sous-ensembles de) le langage Java; à titre de comparaison, cela serait pratiquement impossible dans un langage dynamique comme Ruby et al.
Cette pensée imprègne le langage, par exemple, la déclaration forcée d'exceptions possibles qu'une méthode peut générer, le type séparé de interface
vs class
pour éviter un héritage multiple ambigu, etc. Pour ce qu’il est (langage du monde réel impératif statique et axé sur la gestion des erreurs de compilation), ces éléments sont en fait assez élégants et puissants. Ils se rapprochent des langages théoriques (scientifiques) qui sont conçus exprès pour explorer certaines de ces questions plus que tout autre langage du monde réel auparavant (à ce moment-là, pensez-vous).
Alors. Avoir un void
type strict est un message clair: cette méthode ne retourne rien, point. C'est ce que c'est. Le remplacer par l'application forcée de toujours renvoyer quelque chose mènerait soit à un comportement beaucoup plus dynamique (comme en Ruby où chaque def a une valeur de retour explicite ou implicite, toujours), ce qui serait mauvais pour la prouvabilité et le raisonnement; ou à gonfler massif en utilisant un autre mécanisme ici.
(Et NB, Ruby (par exemple) gère différemment, et sa solution est toujours exactement comme acceptable que de Java, car il a une philosophie complètement différente. Par exemple , il jette prouvabilité et raisonnabilité complètement hors de la fenêtre tout en mettant un grand accent sur extrêmement haute expressivité de la langue.)