Vous pouvez utiliser un proxy dynamique. Tant que les exceptions vérifiées font partie de l'interface, vous pouvez lancer les exceptions vérifiées depuis le gestionnaire d'invocation. Sinon, ceci est illégal et créera une exception UndeclaredThrowableException qui encapsule l'exception vérifiée levée.
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();
sortie:
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)
Avec une exception vérifiée au noir pour l'interface A:
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
Merci. Une note, Method.invoke() (souvent utilisée dans 'InvocationHandler.invoke()' enveloppe l'exception d'origine dans 'InvocationTargetException', elle doit donc être dépliée.) –