¿Por qué los métodos de BundleActivator OSGI se declaran con "excepción de lanzamiento"?

StackOverflow https://stackoverflow.com/questions/9311890

  •  26-10-2019
  •  | 
  •  

Pregunta

Ambas cosas start y stop Métodos de OSGI Bundleactivador son declarados con throws Exception. Al mismo tiempo, en su libro Efective Java, segunda edición, ítem 62, dice Joshua Bloch

Nunca declare un método "Excepción de lanza"

Entonces, ¿es una mala decisión de diseño en BundleActivator ¿O tal generalidad está justificada en este caso y por qué?

¿Fue útil?

Solución

Tenga en cuenta que puede declarar su start y stop Métodos sin ninguno throws cláusula. (O puede declarar estos métodos con cualquier java.lang.Exception subclases)

Por otro lado, un específico, por ejemplo

void start(BundleContext context) throws BundleActivatorException

El método no cambiaría demasiado. Acabaría de que los implementadores atraparan sus excepciones y retrocedieran dentro de un BundleActivatorException. Dado que cada excepción hace que la activación del paquete sea inútil esto try-catch el bloque es realmente innecesario, por lo que es más fácil de lanzar java.lang.Exception.

Otros consejos

Lanzar una excepción de un start() o stop() El método indica que algo está muy mal, y el cambio del ciclo de vida del paquete no debería pasar. Dado que separamos las preocupaciones de detectar la situación (por el paquete) y manejarla (por el marco), lanzando Exception es lo único razonable que hacer.

Considero el consejo de Josh Bloch anacrónico. No hay nada de malo en throws Exception. Le brinda la opción de lanzar cualquier excepción que desee, y el marco OSGI lo manejará.

Tenga en cuenta que nunca necesita invocar estos métodos usted mismo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top