2012-06-12 3 views
0

Я разработал фреймворк, который позволяет другим людям подключать различные реализации оптимизаторов. Эти оптимизаторы запускаются асинхронно, и я подключил слушателей для запуска до и после внутри асинхронного кода для контроля за выполнением оптимизатора. Например:Ловушка Runtime Исключения в стороннем коде

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

Моя проблема заключается в том, что некоторые ленивый программист бросает некоторый NullPointerExceptions внутри своего кода и предотвращения метод от выполнения слушателей во второй раз. Я думал о том, чтобы поймать RuntimeException, но это мне не нравится.

+0

Если вы хотите все поймать, просто поймайте все «Throwable» или, по крайней мере, «Exception». Это неверно на уровне верхнего уровня/планирования/запуска вашей программы. –

+0

Я стараюсь, чтобы JVM не ошибался. Например, если есть OutOfHeapspace или какая-то другая очень плохая ошибка. – babsher

ответ

1

Каждый раз, когда вы создаете основу для плагинов для запуска вы должны рассмотреть, как обрабатывать исключения, с помощью плагинов, потому что вы, как правило, не хотят плохо себя плагин к сбою всей программы. Нет ничего плохого в том, чтобы вылавливать Exception, RuntimeException или, возможно, даже Throwable здесь (хотя ошибка может все еще быть причиной прерывания).

+0

Есть ли что-то не так с ловушкой? – babsher

+1

@ user673289: это решение. для меня это будет зависеть от того, хочу ли я попытаться оправиться от чего-то, бросающего ошибку. Может быть, выбрать и выбрать, с чем вы можете иметь дело. –

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 :) 
}