Un simile question fornisce la risposta.
In base al JLS, per impostazione predefinita, lo stacktrace viene compilato quando viene creata l'istanza dell'eccezione. Tuttavia, ci sono momenti in cui potresti voler "resettare" lo stack in una posizione più utile durante il rethrowing.
Per consentire questa funzionalità, abbiamo fillInStackTrace()
EDIT
Bene, oggi ho imparato la specifica libreria standard di Java è stato rimosso dalla JLS dopo la revisione 1. Come la prefazione alla seconda edizione:
The specifications of the libraries are now far too large to fit into this volume, and
they continue to evolve. Consequently, API specifications have been removed from
this book. The library specifications can be found on the Web; this specification
now concentrates solely on the Java programming language proper.
Come tale, abbiamo davvero bisogno di guardare più da vicino la javadoc per capirlo. L'API è qui sorprendentemente allentata.Le intere porzioni rilevanti sono dall'intestazione, in cui si afferma:
Instances of two subclasses, Error and Exception, are conventionally used to indicate
that exceptional situations have occurred. Typically, these instances are freshly
created in the context of the exceptional situation so as to include relevant
information (such as stack trace data).
E java.lang.Throwable.printStackTrace() è
Prints this throwable and its backtrace to the standard error stream.
La mia convinzione è che questo è quello di consentire implementors VM per fornire qualunque è l'implementazione più performante/appropriata per il loro contesto. Con questo contesto, avere il pubblico esplicito fillInStackTrace() ha ancora più senso.
Per impostazione predefinita, le macchine virtuali forniscono la posizione migliore per il backtrace dello sforzo. Rendere pubblico fillInStackTrace() consente agli sviluppatori di perfezionare ulteriormente.
-
un montaggio finale :)
sono riuscito a rintracciare un collegamento mancante alla relevant bits of the JLS First Edition e mi piacerebbe offrire un ulteriore motivo per cui il metodo è pubblico. È meglio o peggio una spiegazione comune in Java.
Era sempre stato così.
Questo è interessante, ma non è forse un concetto di Java per controllare il flusso tramite eccezioni? –
In generale si, ma come puoi vedere se segui i collegamenti, a volte è molto utile. – sbridges
Dubito che questo uso fosse l'intenzione dei progettisti – Attila