Let decir que tengo esta interfaz A que es implementada por múltiples proveedores:Java: ¿Cuál es la forma correcta de declarar un método de interfaz que puede arrojar una excepción?
interface A
{
void x();
void y();
}
Sin embargo, quiero proveedores sean capaces de lanzar excepciones para señalar que algo ha fallado y, potencialmente, el método podría lanzado una RuntimeException
. En cada caso, el código que llama a estos métodos debe manejar el error y continuar. Solo porque un vendedor arroja un NPE, no quiero que el sistema se caiga. En lugar de dejar en manos de la persona que llama el método (o en realidad por el propio mantenimiento de línea), me gustaría para asegurarse de que cada llamada capturar todas las excepciones al declarar cada método como:
void x() throws Exception;
pero esto es generalmente mal práctica (al PMD no le gusta y, en general, estoy de acuerdo con la regla de los métodos concretos), entonces me pregunto si esto es una excepción a la regla o si hay una forma mejor.
Déjenme ser claro, estoy buscando una solución donde la persona que llama de la interfaz se ve obligada a manejar todas las excepciones (incluyendo RuntimeException
s).
Para detallar más mi entorno, todo esto se ejecuta dentro de un marco OSGi. Entonces, cada proveedor empaqueta su código en un paquete y OSGi manejará todas las excepciones para evitar que todo el sistema se cuelgue. Lo que realmente estoy buscando son las interfaces de servicio OSGi que serán llamadas por algunos paquetes centrales. Lo que quiero asegurar es que cuando repito todos los servicios, un servicio no lanza un NPE y detiene el proceso que se está ejecutando. Quiero manejarlo de forma más elegante detectando todas las excepciones lanzadas desde el servicio para que los otros servicios proporcionados sigan administrándose.
Esta pregunta no es específica de las interfaces, ¿o sí? Quiero decir, los mismos problemas se aplican a los métodos abstractos e incluso a las implementaciones de métodos que podrían (o incluso podrían esperarse) anular. –
Si este método está haciendo 'algo', ¿es algo tan amplio que podría arrojar alguna excepción? – blank
Sería difícil restringir el conjunto de excepciones, entonces sí. –