Puede usar un proxy dinámico. Siempre que las excepciones marcadas sean parte de la interfaz, puede lanzar las excepciones marcadas desde el controlador de invocación. De lo contrario, esto es ilegal y creará una excepción de detección no detectable que envuelve la excepción comprobada arrojada.
interface A{
void x() throws IOException;
}
A proxy = (A) newProxyInstance(classLoader, new Class<?>[]{A.class},
new InvocationHandler() {
@Override
public Object invoke(Object arg0, Method arg1, Object[] arg2)
throws Throwable {
throw new IOException();
}
}
);
proxy.x();
Salida:
Exception in thread "main" java.io.IOException
at X$1.invoke(X.java:19)
at $Proxy0.x(Unknown Source)
at X.main(X.java:22)
Con una excepción no declarado comprobado para la interfaz R:
interface A{
void x();
}
Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
at $Proxy0.x(Unknown Source)
at X.main(X.java:22)
Caused by: java.io.IOException
at X$1.invoke(X.java:19)
... 2 more
Gracias. Una nota, Method.invoke() (a menudo se usa en 'InvocationHandler.invoke()' envuelve la excepción original en 'InvocationTargetException', por lo que necesita ser desenvuelta. –