Je veux une méthode qui peut lancer n'importe quel Throwable y compris les sous-classes d'Exception. J'ai quelque chose qui prend une exception, le stocke dans un thread local, puis appelle un class.newInstance. Cette classe ctor déclare qu'elle lance Exception puis prend le threadlocal et le lance. Le problème est que cela ne fonctionne pas pour les deux Exceptions déclarées par Class.newInstance()
à savoir IllegalAccessException
et InstantiationException
. Im deviner toute autre méthode en utilisant une classe sun.*
est juste un hack et pas vraiment fiable.Magic Lanceur d'exception sans déclarer de lancement Exception
Emballage n'est pas une option, car cela signifie que les capteurs rattrapent un type diff et c'est trop simple et ennuyeux ...
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();
}
}
Je ne peux pas obtenir ce que vous essayez d'atteindre .. – Bozho
Je ne peux pas imaginer pourquoi cela pourrait être utile. – duffymo
Je pense que c'est juste pour m'amuser. Comment pouvez-vous lancer une exception vérifiée sans la déclarer dans une clause throws? –