Kolejny aspekt:
Java to język statyczny z dość ścisłymi funkcjami. Oznacza to, że wiele rzeczy, które byłyby dość otwarte lub dynamiczne w innych językach (c / f Ruby, Lisp itp.) Są ściśle określone.
Jest to ogólna decyzja projektowa. Na „dlaczego” trudno jest odpowiedzieć (cóż, ponieważ projektanci języka sądzili, że będzie dobrze!). „Po co” jest dość jasne: pozwala kompilatorowi wykryć wiele błędów, co ogólnie jest całkiem dobrą cechą dla każdego języka. Po drugie, sprawia, że stosunkowo łatwo jest zrozumieć język. Na przykład stosunkowo łatwo jest stworzyć formalne dowody poprawności w (podzestawach) języka Java; dla porównania byłoby to praktycznie niemożliwe w dynamicznym języku, takim jak Ruby i in.
Takie myślenie przenika język, na przykład wymuszoną deklarację możliwych wyjątków, które może rzucić metoda, osobny typ interface
kontra, class
aby uniknąć niejednoznacznego wielokrotnego dziedziczenia i tak dalej. W rzeczywistości (statyczny imperialny język OOP w świecie rzeczywistym z silnym naciskiem na obsługę błędów w czasie kompilacji) te rzeczy są naprawdę dość eleganckie i potężne. Zbliżają się do języków teoretycznych (naukowych), które zostały celowo stworzone wyłącznie po to, aby zbadać niektóre z tych zagadnień niż jakikolwiek inny język rzeczywisty wcześniej (w tym czasie, pamiętajcie).
Więc. Posiadanie ścisłego void
typu jest wyraźnym komunikatem: ta metoda niczego nie zwraca, kropka. Jest jak jest. Zastąpienie go wymuszeniem, aby zawsze zwracało coś, prowadziłoby do znacznie bardziej dynamicznego zachowania (tak jak w Ruby, gdzie każdy def ma zawsze wyraźną lub dorozumianą wartość zwrotu), co byłoby niekorzystne z punktu widzenia sprawdzalności i uzasadnienia; lub do masywnego wzdęcia za pomocą innego mechanizmu tutaj.
(I na przykład, Ruby (na przykład) radzi sobie z tym inaczej, a jego rozwiązanie jest nadal tak samo akceptowalne jak Java, ponieważ ma zupełnie inną filozofię. Na przykład wyrzuca możliwości sprawdzania się i rozsądności całkowicie poza okno, kładąc duży nacisk na wyjątkowo wysoka ekspresja języka).