Domanda

Sia start e stop metodi di OSGI BundleActivator sono dichiarate con throws Exception. Allo stesso tempo, nel suo libro Effective Java, Second Edition, punto 62, Joshua Bloch dice

mai dichiarare un metodo "getta Eccezione"

Quindi è una decisione di progettazione povero di BundleActivator o tale generalità è giustificata in questo caso e perché?

È stato utile?

Soluzione

Si prega di notare che è possibile dichiarare il vostro start e metodi stop, senza alcuna clausola throws. (In alternativa, è possibile dichiarare questi metodi con eventuali sottoclassi java.lang.Exception.)

Per contro, una specifica, ad esempio

void start(BundleContext context) throws BundleActivatorException

metodo non cambiare troppo. Sarebbe appena fatto gli esecutori per catturare le loro eccezioni e rigenerare avvolto all'interno di un BundleActivatorException. Dal momento che ogni eccezione rende inutile attivazione fascio questo blocco try-catch è davvero inutile, così è più facile gettare java.lang.Exception.

Altri suggerimenti

un'eccezione da un metodo start() o stop() indica che qualcosa è seriamente sbagliato, e il cambiamento del ciclo di vita fascio non deve passare attraverso. Poiché si separano le preoccupazioni di rilevare la situazione (dal fascio), e la manipolazione (dal quadro), gettando Exception è l'unica cosa ragionevole da fare.

considero di Josh Bloch consiglio anacronistica. Non c'è niente di sbagliato con throws Exception. Ti dà la possibilità di gettare tutto ciò un'eccezione che ti piace, e il quadro OSGi lo gestirà.

Si noti che non è mai necessario richiamare questi metodi da soli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top