run()メソッドでいくつかのストリームを処理する抽象スレッドを作成しました。抽象親クラスではなく、サブクラスにこれらの例外を処理させたいのですが、それを行うための最も洗練された方法がわかりません。今、私はこのようなことをしています:
import org.apache.logging.log4j; // (I use log4j for logging)
public interface Loggable {
Logger getLogger();
}
public abstract class ParentThread extends Thread implements Loggable {
private final static Logger logger =
Logger.getLogger(ParentThread.class); // Logger with no Appenders
@Override
public void run() {
try {
// Do some stuff that throws exceptions
doAbstractStuff();
} catch (SomeSortOfException ex) {
getLogger().error("Oh noes!", ex);
} catch (SomeOtherException ex) {
getLogger().error("The sky is falling!", ex);
}
}
public Logger getLogger() { return logger; }
protected abstract void doAbstractStuff();
}
public class ChildThread extends ParentThread {
@Override
public Logger getLogger() { /* return a logger that I actually use */ }
@Override
public void doAbstractStuff() { /* Implementation */ }
}
ChildThreadは実際には私のメインフォームの内部クラスであり、そのロガーはそのフォームに属していることを言及する必要があると思います。
私が考えた別のアプローチは、
abstract void handleException(Exception ex);
ParentThreadにありますが、ChildThreadからの個々の例外を処理できません。