Просто следите за тем, как я это сделал и почему:
Rule
из MonoBehaviour
, чтобы избежать отслеживания создания и удаления объектов gameObjects, которая оказалась болью. Invoke
не существует в родовых классах, я заменил его отражением, как описано здесь здесь Установите переменную флага, затем проверьте на нее в наконец пункт, как так:
boolean exceptionThrown = true;
try {
mightThrowAnException();
exceptionThrown = false;
} finally {
if (exceptionThrown) {
// Whatever you want to do
}
}
Если Вы делаете это, то у Вас могла бы быть проблема с Вашим дизайном. Идея "наконец" блок - то, что Вы хотите что-то сделанное независимо от того, как метод выходит. Кажется мне как Вы, не нуждаются наконец блок вообще и должен просто использовать блоки try-catch:
try {
doSomethingDangerous(); // can throw exception
onSuccess();
} catch (Exception ex) {
onFailure();
}
Если функция бросает, и Вы хотите поймать исключение, необходимо будет перенести функцию в блок попытки, это - самый безопасный путь. Таким образом в Вашем примере:
try {
// ...
} finally {
try {
SomeCleanupFunctionThatThrows();
} catch(Throwable t) { //or catch whatever you want here
// exception handling code, or just ignore it
}
}
Вы подразумеваете, что хотите наконец блок действовать по-другому в зависимости от ли блок попытки, завершенный успешно?
Если так, Вы могли всегда делать что-то как:
boolean exceptionThrown = false;
try {
// ...
} catch(Throwable t) {
exceptionThrown = true;
// ...
} finally {
try {
SomeCleanupFunctionThatThrows();
} catch(Throwable t) {
if(exceptionThrown) ...
}
}
Это становится довольно замысловатым, хотя... Вы могли бы хотеть думать о способе реструктурировать Ваш код для создания выполнения этого ненужным.
Нет я не верю так. Блок выгоды будет работать к завершению перед наконец блок.
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
}
Иначе можно добавить, что синхронизирование () возражает, что код исключения будет использовать, что можно зарегистрироваться наконец блок, который помог бы Вам определить, выполняете ли в отдельном потоке Вы исключение.