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 general de diseño. El "por qué" es difícil de responder (bueno, ¡porque los diseñadores del lenguaje pensaron que sería bueno!). El "para qué" es bastante claro: permite que el compilador detecte muchos errores, 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; en 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 puede arrojar un método, el tipo separado de interface
vs. class
para evitar una herencia múltiple ambigua, y así sucesivamente. Por lo que es (un lenguaje del mundo real imperativo estático OOP con un fuerte enfoque en el manejo de errores en tiempo de compilación), esas cosas son en realidad bastante elegantes y poderosas. Se acercan más a los lenguajes teóricos (científicos) que están hechos a propósito solo para explorar algunos de estos problemas que cualquier otro lenguaje del mundo real antes (en ese momento, eso sí).
Entonces. Tener un void
tipo estricto es un mensaje claro: este método no devuelve nada, punto. Es lo que es. Reemplazarlo por la aplicación para que siempre devuelva algo conducirí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 demostrabilidad y el razonamiento; o para una hinchazón masiva usando 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, porque tiene una filosofía completamente diferente. Por ejemplo, arroja completamente la probabilidad y la razonabilidad por completo mientras pone un gran enfoque en extremadamente alta expresividad del lenguaje.)