Приводят к сбою быстро наконец пункт в Java

Просто следите за тем, как я это сделал и почему:

  1. Я больше не наследую класс Rule из MonoBehaviour, чтобы избежать отслеживания создания и удаления объектов gameObjects, которая оказалась болью.
  2. Поскольку метод Invoke не существует в родовых классах, я заменил его отражением, как описано здесь здесь

5
задан Rann Lifshitz 1 June 2018 в 03:38
поделиться

5 ответов

Установите переменную флага, затем проверьте на нее в наконец пункт, как так:

boolean exceptionThrown = true;
try {
   mightThrowAnException();
   exceptionThrown = false;
} finally {
   if (exceptionThrown) {
      // Whatever you want to do
   }
}
14
ответ дан 18 December 2019 в 06:36
поделиться

Если Вы делаете это, то у Вас могла бы быть проблема с Вашим дизайном. Идея "наконец" блок - то, что Вы хотите что-то сделанное независимо от того, как метод выходит. Кажется мне как Вы, не нуждаются наконец блок вообще и должен просто использовать блоки try-catch:

try {
   doSomethingDangerous(); // can throw exception
   onSuccess();
} catch (Exception ex) {
   onFailure();
}
10
ответ дан 18 December 2019 в 06:36
поделиться

Если функция бросает, и Вы хотите поймать исключение, необходимо будет перенести функцию в блок попытки, это - самый безопасный путь. Таким образом в Вашем примере:

try {
    // ...
} finally {
    try {
        SomeCleanupFunctionThatThrows();
    } catch(Throwable t) { //or catch whatever you want here
        // exception handling code, or just ignore it
    }
}
1
ответ дан 18 December 2019 в 06:36
поделиться

Вы подразумеваете, что хотите наконец блок действовать по-другому в зависимости от ли блок попытки, завершенный успешно?

Если так, Вы могли всегда делать что-то как:

boolean exceptionThrown = false;
try {
    // ...
} catch(Throwable t) {
    exceptionThrown = true;
    // ...
} finally {
    try {
        SomeCleanupFunctionThatThrows();
    } catch(Throwable t) { 
        if(exceptionThrown) ...
    }
}

Это становится довольно замысловатым, хотя... Вы могли бы хотеть думать о способе реструктурировать Ваш код для создания выполнения этого ненужным.

0
ответ дан 18 December 2019 в 06:36
поделиться

Нет я не верю так. Блок выгоды будет работать к завершению перед наконец блок.

try {
    // code that may or may not throw an exception
} catch {
// catch block must exist.
finally {
    SomeCleanupFunctionThatThrows();
// this portion is ran after catch block finishes
}

Иначе можно добавить, что синхронизирование () возражает, что код исключения будет использовать, что можно зарегистрироваться наконец блок, который помог бы Вам определить, выполняете ли в отдельном потоке Вы исключение.

-1
ответ дан 18 December 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: