Un altro aspetto:
Java è un linguaggio statico con funzionalità piuttosto rigide. Ciò significa che molte cose che sarebbero abbastanza aperte o dinamiche in altre lingue (c / f Ruby, Lisp ecc.) Sono rigorosamente determinate.
Questa è una decisione di progettazione generale. È difficile rispondere al "perché" (beh, perché i progettisti del linguaggio hanno pensato che sarebbe stato bello!). Il "what for" è abbastanza chiaro: consente al compilatore di rilevare molti errori, che è generalmente una buona funzionalità per qualsiasi lingua. In secondo luogo, rende relativamente facile ragionare sulla lingua. Ad esempio, è relativamente facile creare la correttezza formale che prova (sottoinsiemi) del linguaggio Java; come confronto, ciò sarebbe praticamente impossibile in un linguaggio dinamico come Ruby et al.
Questo pensiero permea la lingua, ad esempio, la dichiarazione forzata di possibili eccezioni che un metodo può generare, il tipo separato di interface
vs. class
per evitare l'eredità multipla ambigua e così via. Per quello che è (un linguaggio del mondo reale OOP statico imperativo con forte attenzione alla gestione degli errori in fase di compilazione) queste cose sono in realtà piuttosto eleganti e potenti. Si avvicinano alle lingue teoriche (scientifiche) che sono state create apposta per esplorare alcuni di questi problemi rispetto a qualsiasi altra lingua del mondo reale prima (a quel tempo, attenzione).
Così. Avere un void
tipo rigoroso è un messaggio chiaro: questo metodo non restituisce nulla, punto. È quello che è. Sostituirlo con l'applicazione per restituire sempre qualcosa porterebbe a comportamenti molto più dinamici (come in Ruby dove ogni def ha un valore di ritorno esplicito o implicito, sempre), che sarebbe male per la provabilità e il ragionamento; o per gonfiare enormemente usando qualche altro meccanismo qui.
(E NB, Ruby (per esempio) gestisce in modo diverso, e la sua soluzione è ancora esattamente come accettabile come Java, perché ha una filosofia completamente diversa. Per esempio si getta dimostrabilità e ragionevolezza completamente fuori dalla finestra, mentre mettendo un grande fuoco su espressività estremamente elevata della lingua.)