我想會拋出異常的任何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