1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| abstract class AbstractRunnable implements Runnable {
/**
* On utilise une méthode abstraite qui remplacera run(),
* et qui permet de remonter n'importe quelle exception :
* @throws Throwable
*/
public abstract void runOrThrow() throws Throwable;
/** On utilise un attribut pour stocker les eventuelles exceptions : */
private Throwable throwable = null;
/**
* On implémente run() afin qu'elle appelle runOrThrow() et conserve
* les éventuelles exceptions...
*/
public final void run() {
try {
runOrThrow();
} catch (Throwable t) {
this.throwable = t;
}
}
// + des méthodes utilitaires pour déterminer s'il y a eu une exception ou pas :
public boolean isValid() {
return this.throwable==null;
}
public Throwable getThrowable() {
return this.throwable;
}
} |