我想会抛出异常的任何Throwable的包括子类的方法。我有一些需要异常的东西,将它存储在本地线程中,然后调用一个class.newInstance。该类ctor声明它抛出异常,然后接受threadlocal并抛出它。问题是,它不适合由Class.newInstance()
即IllegalAccessException
和InstantiationException
抛出这两个声明的异常工作。魔术异常抛出抛出异常
即时通讯使用一些sun.*
类猜测任何其他方法只是一个黑客并没有真正可靠的。
包装是不是一种选择,因为这意味着捕捉器捕捉一个diff类型,这只是太简单枯燥......
static public void impossibleThrow(final Throwable throwable) {
Null.not(throwable, "throwable");
if (throwable instanceof RuntimeException) {
throw (RuntimeException) throwable;
}
if (throwable instanceof Error) {
throw (Error) throwable;
}
try {
THROW.set((Exception) throwable);
THROWER.newInstance();
} catch (final InstantiationException screwed) {
throw new Error(screwed);
} catch (final IllegalAccessException screwed) {
throw new Error(screwed);
} finally {
THROW.remove();
}
}
private final static Class<Impossible> THROWER = Impossible.class;
private final static ThreadLocal<Exception> THROW = new ThreadLocal<Exception>();
static private class Impossible {
@SuppressWarnings("unused")
public Impossible() throws Exception {
throw THROW.get();
}
}
我不能让你尝试acheive什么.. – Bozho 2010-01-03 10:49:38
我无法想象,为什么这可能是有用的。 – duffymo 2010-01-03 12:34:31
我认为这只是为了好玩。你怎么能抛出一个检查的异常,而不用在throws子句中声明它呢? – 2010-01-03 13:10:26