Sie können einen dynamischen Proxy verwenden. Solange die geprüften Ausnahmen Teil der Schnittstelle sind, können Sie die geprüften Ausnahmen vom Aufruf-Handler abwerfen. Andernfalls ist dies illegal und es wird eine UndeclaredThrowableException erstellt, die die ausgelöste, geprüfte Ausnahme umschließt.
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();
Ausgang:
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)
Mit einer nicht angemeldeten geprüfte Ausnahme für Schnittstelle 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
Dank. Eine Anmerkung, Method.invoke() (häufig in 'InvocationHandler.invoke()' verwendet, umschließt die ursprüngliche Ausnahme in 'InvocationTargetException', also muss sie ausgepackt werden. –