Хорошо поймать UnsatisfiedLinkError, чтобы вернуться в другую DLL при вызове System.LoadLibrary?

При запуске я хочу, чтобы моя программа Java загружала DLL, которая должна быть на пути, определенном java.library.path. Однако, если эта DLL отсутствует, я хочу, чтобы моя программа возвращалась к загрузке другой DLL. System.LoadLibrary выбрасывает UnsatisfiedLinkError, если он не может найти файл DLL. UnsatisfiedLinkError является подклассом Error, а не Exception. Многие комментарии говорят о том, что ошибочная практика ловить ошибку. Это случай, когда можно сделать что-то подобное?

try
{
    System.loadLibrary("myLibrary");
}
catch (UnsatisfiedLinkError e)
{
    try
    {
        System.load(<a fully qualified path to my fall-back library>);
    }
    catch (UnsatisfiedLinkError e)
    {
        <report that even the fall-back library didn't load>;
    }
}

Ответы

Ответ 1

В этом случае это вполне приемлемо. На самом деле это единственный способ сделать то, что вы хотите сделать.

В общем, это плохая практика, чтобы поймать Ошибки, потому что вы ничего не можете сделать, чтобы восстановить их, и после этого приложение может быть в непредсказуемом состоянии. Например, OutOfMemoryError означает, что у вас закончилась нехватка памяти, и вы можете сделать это очень мало. StackOverflowError означает, что ваш стек вызовов стал слишком глубоким, и вы не можете много сделать с этим.