Как обрабатывать исключения, которые вы не ожидали, даже не подозревая, что это заявлено в документации? - PullRequest
0 голосов
/ 15 июня 2019

Когда есть методы, которые генерируют исключения, и вы знаете, что эти исключения не будут выброшены, что вы должны делать?

Часто я вижу, как люди просто регистрируют исключение, но мне интересно, есть ли сборка висключение в Java, которое означает что-то вроде: «Это исключение не должно быть выброшено».

Например, представьте, что у меня есть код, который вызывает StaticClass.method(someObject), и этот метод выдает SpecificException, когда someObjectнедействительный.Что делать в блоке catch?

try {
  StaticClass.method(someobject);
} catch (SpecificException e) {
  // what should I do here?
}

1 Ответ

1 голос
/ 15 июня 2019

Если при вызове метода вы точно знаете, что он не сгенерирует исключение из-за предыдущих проверок, вы должны выбросить RuntimeException, обертывающий SpecificException.

try {
  StaticClass.method(someobject);
} catch (SpecificException e) {
  //This is unexpected and should never happen. 
  throw new RuntimeException("Error occured", e);
}

Некоторые методы уже выдаютRuntimeException, когда им не удается выполнить свое предназначение.

//Here we know for sure that parseInt(..) will not throw an exception so it
//is safe to not catch the RuntimeException.
String s = "1";
int i = Integer.parseInt(s);

//Here instead parseInt(..) will throw a IllegalArgumentException which is a
//RuntimeException because h is not a number. This is something that should
//be fixed in code.
s = "h";
i = Integer.parseInt(s);

RuntimeException - не требует блока try / catch, и компилятор не будет злиться на вас за то, что он не перехватил их.Обычно они создаются там, где что-то в коде вашего приложения неверно и должно быть исправлено.В любом случае, есть случаи, когда перехват RuntimeException полезен.

...