Otro aspecto:
Java es un lenguaje estático con características bastante estrictas. Esto significa que muchas cosas que serían bastante abiertas o dinámicas en otros idiomas (c / f Ruby, Lisp, etc.) están estrictamente determinadas.
Esta es una decisión de diseño general. El "por qué" es difícil de responder (bueno, ¡porque los diseñadores del lenguaje pensaron que sería bueno!). El "para qué" está bastante claro: le permite al compilador detectar un lote de errores, lo que generalmente es una característica bastante buena para cualquier idioma. En segundo lugar, hace que sea relativamente fácil razonar sobre el idioma. Por ejemplo, es relativamente fácil crear pruebas formales de corrección en (subconjuntos de) el lenguaje Java; como comparación, eso sería prácticamente imposible en un lenguaje dinámico como Ruby et al.
Este pensamiento impregna el lenguaje, por ejemplo, la declaración forzada de posibles excepciones que un método puede lanzar, el tipo separado de interface
vs. class
para evitar la herencia múltiple ambigua, y así sucesivamente. Para lo que es (un lenguaje del mundo real OOP imperativo estático con un fuerte enfoque en el manejo de errores de tiempo de compilación) esas cosas son bastante elegantes y potentes. Se acercan más a los lenguajes teóricos (científicos) diseñados específicamente para explorar algunos de estos problemas que cualquier otro lenguaje del mundo real anterior (en ese momento, imagínense).
Entonces. Tener un tipo void
estricto es un mensaje claro: este método no devuelve nada, punto. Es lo que es. Reemplazarlo por la aplicación para devolver siempre algo llevaría a un comportamiento mucho más dinámico (como en Ruby donde cada def tiene un valor de retorno explícito o implícito, siempre), lo que sería malo para la probabilidad y el razonamiento ; o para la hinchazón masiva utilizando algún otro mecanismo aquí.
(Y NB, Ruby (por ejemplo) maneja esto de manera diferente, y su solución sigue siendo exactamente tan aceptable como la de Java, ya que tiene una filosofía completamente diferente. Por ejemplo, ofrece probabilidad y razonabilidad por completo. por la ventana mientras pone un gran enfoque en la expresividad extremadamente alta del lenguaje.)