Outro aspecto:
O Java é uma linguagem estática com recursos bastante rígidos. Isso significa que muitas coisas que seriam bastante abertas ou dinâmicas em outras linguagens (c / f Ruby, Lisp etc.) são estritamente determinadas.
Esta é uma decisão geral de design. O "porquê" é difícil de responder (bem, porque os designers da linguagem pensaram que seria bom!). O "what for" é bem claro: ele permite que o compilador detecte um lote de erros, o que geralmente é um bom recurso para qualquer idioma. Em segundo lugar, torna relativamente fácil raciocinar sobre o idioma. Por exemplo, é relativamente fácil criar correção formal em (subconjuntos) da linguagem Java; como comparação, isso seria virtualmente impossível em uma linguagem dinâmica como Ruby et al.
Esse pensamento permeia a linguagem, por exemplo, a declaração forçada de possíveis exceções que um método pode lançar, o tipo separado de interface
vs. class
para evitar herança múltipla ambígua e assim por diante. Para o que é (uma linguagem OOP imperativa estática do mundo real com strong foco no tratamento de erros de tempo de compilação), essas coisas são realmente muito elegantes e poderosas. Eles se aproximam de linguagens teóricas (científicas) que são intencionalmente feitas apenas para explorar algumas dessas questões do que qualquer outra linguagem do mundo real antes (na época, lembre-se).
Ter um tipo void
estrito é uma mensagem clara: esse método não retorna nada, ponto final. É o que é. Substituí-lo pela imposição para sempre retornar algo levaria a um comportamento muito mais dinâmico (como em Ruby, onde cada def tem um valor de retorno explícito ou implícito, sempre), o que seria ruim para provabilidade e raciocínio ; ou ao inchaço massivo usando algum outro mecanismo aqui.
(E NB, Ruby (por exemplo) lida com isso de forma diferente, e sua solução ainda é exatamente aceitável como Java, porque tem uma filosofia completamente diferente. Por exemplo, ele gera provabilidade e razoabilidade completamente fora da janela ao colocar um grande foco na expressividade extremamente alta da linguagem.