1

私は、他の人がオプティマイザのさまざまな実装をプラグインできるようにするフレームワークを開発しました。これらのオプティマイザーは非同期で実行されます。オプティマイザーの実行を監視するために、非同期コード内で前後に実行するリスナーをアタッチしました。例えば:

public void async(Optimizer o){
   runListeners(o);
   o.run();
   runListeners(o);
}

私の問題は、怠惰なプログラマーがコード内に some をスローしNullPointerExceptions、メソッドがリスナーを2回目に実行できないようにしていることです。捕まえようと思っRuntimeExceptionたけど、これはまずい気がする。

4

2 に答える 2

1

プラグインを実行するためのフレームワークを作成するときはいつでも、プラグインによってスローされた例外を処理する方法を検討する必要があります。通常、動作の悪いプラグインによってプログラム全体がクラッシュすることは望ましくないためです。ここで Exception、RuntimeException、またはおそらく Throwable をキャッチしても問題はありません (ただし、エラーは依然として中止の原因になる可能性があります)。

于 2012-06-12T14:54:29.753 に答える
0
runListeners(o);
try {
  o.run();
} finally {
  runListeners(o);  // this will get run even if you get NPE
  // now your program crashes with the NPE :)
}
于 2012-06-12T14:54:12.940 に答える